我如何更有效地绘制它?
当我调用下面的代码时,我会感觉到滞后。注意这是关于像素编辑而不是清除屏幕。
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);
}
答案 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