可能重复:
How do I double buffer a Panel in C#?
c# panel for drawing graphics and scrolling
我在面板上绘制一个位图,我在同一个面板上使用缩放。缩放面板时不断闪烁。为什么Panel没有DoubleBuffered属性?
代码:
Graphics g = Graphics.FromHwnd(panel.Handle);
if (newImage == true)
{
g.Clear(SystemColors.Control);
newImage = false;
}
g.DrawImage(bmp, hOffset, vOffset);
g.Dispose();
答案 0 :(得分:1)
使用它。
System.Drawing.BufferedGraphics
我是游戏开发者。在游戏中,我们首先在后备缓冲区中绘制所有对象,然后将其复制或翻转到前缓冲区。您可以使用
System.Drawing.BufferedGraphics
作为后备缓冲区并将其渲染到图形对象。
System.Drawing.Graphics
例如:
System.Drawing.Graphics g = this.CreateGraphics();
System.Drawing.BufferedGraphicsContext dc = new BufferedGraphicsContext();
BufferedGraphics backbuffer = dc.Allocate(g, new Rectangle(new Point(0, 0), g.VisibleClipBounds.Size.ToSize()));
backbuffer.Graphics.DrawImage(Image.FromFile(@"c:\test.jpg"), new Point(10, 10));
backbuffer.Render(g);
答案 1 :(得分:1)
在构造函数
中添加此代码this.SetStyle(ControlStyles.AllPaintingInWmPaint |ControlStyles.UserPaint |ControlStyles.DoubleBuffer, true);
答案 2 :(得分:0)
你在哪里画位图?
如果不在Paint
事件或OnPaint
覆盖,则表示错误。
要回答您的问题,只有表单包含DoubleBuffered
属性,IIRC。
答案 3 :(得分:-1)
我不是100%肯定,但你不能在窗体/窗口上激活DoubleBuffered吗?
如果你要使用gui和很多效果,我会选择WPF而不是winforms ..
您还可以覆盖OnPaint和OnPaintBackground ..