我如何更有效地画画?

时间:2009-07-08 01:07:46

标签: c# drawing

我如何更有效地绘制它?

当我调用下面的代码时,我会感觉到滞后。注意这是关于像素编辑而不是清除屏幕。

    int colorIndex = 0;
    private void pictureBox1_Click(object sender, EventArgs e)
    {
        if (colorIndex == 0)
            draw(Color.DimGray);
        else if(colorIndex ==1)
            draw(Color.ForestGreen);
        colorIndex++;
        colorIndex = colorIndex % 2;

        pictureBox1.Invalidate();
        //pictureBox1.Update();
    }

    void draw(Color c)
    {
        //var bdata = b.LockBits(Rectangle.Empty, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        //var px = bdata.Scan0;
        var px = b;
        {
            for (int y = 0; y < b.Height; y++)
            {
                for (int x = 0; x < b.Width; x++)
                    //px[y * b.Width + x] = -1;
                    px.SetPixel(x, y, c);
            }
        }
        //b.UnlockBits(bdata);
    }

3 个答案:

答案 0 :(得分:3)

您是否启用了double buffering

btw,如果您只是绘制矩形,可以使用DrawRectangle方法。

答案 1 :(得分:1)

怎么样:

void draw(Color c) {
   using (Graphics g = Graphics.FromImage(b)) {
      g.Clear(c);
   }
}

答案 2 :(得分:0)

SetPixel / GetPixel通常运行缓慢。如果你可以使用不安全的代码(使用指针的代码),有更快的访问方法,但它们涉及的更多。这里有一个教程解释它是如何工作的,但是:

http://www.codeproject.com/KB/GDI-plus/csharpgraphicfilters11.aspx