为什么BufferedGraphics在使用c#绘图时速度慢

时间:2010-06-22 07:38:06

标签: c# .net

我在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这个工作正常的小例子,但是当负载增加时它会变慢。

3 个答案:

答案 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外部创建一个位图,并引用它。