图形对象无法正确刷新

时间:2010-07-22 17:35:47

标签: c# .net winforms graphics gdi+

我有一个名为“buffer”的Bitmap,我

  1. 绘制另一个图像(使用DrawImage)
  2. 绘制部分透明渐变(使用LinearGradientBrush)
  3. 在每个步骤之后,我在缓冲区的Graphics对象上调用Flush(FlushIntention.Sync)。然后我将缓冲区的内容绘制到屏幕控件上。

    然而,在调试时,我注意到有时缓冲区没有绘制渐变。即使我明确调用同步Flush命令,也可能导致第二个绘制操作被跳过?

    有解决方法吗?

    编辑:代码示例

    Bitmap background = ....;
    Bitmap buffer = new Bitmap(100, 100);
    Rectangle bufferBounds = new Rectangle(0, 0, buffer.Width, buffer.Height);
    Graphics bufferG = Graphics.FromImage(buffer);
    
    // First step
    bufferG.DrawImageUnscaled(background, 0, 0);
    bufferG.Flush(FlushIntention.Sync);
    
    // Second step
    LinearGradientBrush lgb = new LinearGradientBrush(bufferBounds,
                    maxColor, minColor, LinearGradientMode.Vertical);
    bufferG.FillRectangle(lgb, bufferBounds);
    bufferG.Flush(FlushIntention.Sync);
    

1 个答案:

答案 0 :(得分:0)

我注意到你没有在using块中创建Graphics对象。是否需要Dispose()才能完全冲洗它?

using (Graphics bufferG = Graphics.FromImage(buffer)
{
...
}