1

我没有学习太多 C# 中的 Graphics 类,但我发现自己需要它来度过我每天的娱乐时光(编码以打发时间)。

我只想知道是否有一种方法可以存储绘制的图形(在它们在表单上可见之前),以便我可以同时绘制整个段,而不是一个一个地绘制。Graphics段是指可以使用该类绘制的形状的集合。

.FillRectangle换句话说,在我尝试通过调用或等效方法将其显示在屏幕上之前,我试图将所有这些绘制出来。

还有没有任何已知的方法可以在不使用 GDI+ 等现有方法的情况下绘制图形?

如果我错过了什么,请告诉我。

编辑代码:

      using (Graphics formGraphics = df.CreateGraphics())
        {
            this.DoubleBuffered = true;
            foreach (Dot d in memmap)
            {
                c = Color.FromArgb(d.r, d.g, d.b);
                using (SolidBrush brush = new SolidBrush(c))
                {
                    formGraphics.FillRectangle(brush, d.x, d.y, 1, 1);
                }
            }
            this.DoubleBuffered = false;
        }
4

1 回答 1

0

如果您始终将 DoubleBuffered 属性设置为 true 并让框架处理它,那么您所做的应该会起作用。你试过吗?无论如何,我更喜欢拥有更多控制权并在我的代码上创建双缓冲区:

using
(
    var bufferedGraphics = BufferedGraphicsManager.Current.Allocate(formGraphics, 
      new Rectangle(0, 0, width, height));
)
{
    //Draw with bufferendGraphics.Graphics
    bufferedGraphics.Render();
}

formGraphics如果您在执行过程中保持和活动状态,则上述代码可以进一步优化bufferendGraphics......但这会引入泄漏,您需要确保在关闭 from 之前处理它们。

顺便说一句,您为什么使用 CreateGraphics?我会覆盖表单的 OnPaint 并从 PaintEventArgs 中获取图形。

于 2013-02-04T08:45:09.677 回答