我在Form_Paint函数上使用BufferedGraphics。它绘制了我需要的图形,但它太慢了。请给我提示解决这个问题,或者建议我使用任何其他绘图技术来快速响应。
BufferedGraphicsContext currentContext;
BufferedGraphics myBuffer;
// Gets a reference to the current BufferedGraphicsContext
currentContext = BufferedGraphicsManager.Current;
// Creates a BufferedGraphics instance associated with Form1, and with
// dimensions the same size as the drawing surface of Form1.
myBuffer = currentContext.Allocate(this.CreateGraphics(),
this.DisplayRectangle);
// Draws an ellipse to the graphics buffer.
myBuffer.Graphics.DrawImage(new Bitmap("C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\Pics\\Pic.jpg"), 0, 0);
myBuffer.Graphics.DrawEllipse(Pens.Blue, 5, 90, 10, 10);
myBuffer.Graphics.DrawRectangle(Pens.Gold, 0, 7, 500, 500);
myBuffer.Graphics.DrawLine(Pens.Chartreuse, 0, 0, 800, 800);
myBuffer.Render();
这是BufferedGraphics这个工作正常的小例子,但是当负载增加时它会变慢。
答案 0 :(得分:1)
尝试使用e.Graphics而不是this.CreateGraphics()
答案 1 :(得分:0)
只需设置DoubleBuffered = true
并直接在表单上绘制,它的执行速度就会快得多。
答案 2 :(得分:0)
如前所述,您应该使用:
e.Graphics
代替:
this.CreateGraphics()
关于这一行:
new Bitmap("C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\Pics\\Pic.jpg")
您正在读取每个帧渲染上的图像,您应该在Paint外部创建一个位图,并引用它。