C#窗体控件中使用双缓冲绘图
在PictureBox控件中使用双缓冲绘图,我就不讲原理了,网上一大推,直接上代码,自己总结的用了都没问题。
方法一:
Bitmap image = new Bitmap(PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height);
Graphics g = Graphics.FromImage(image);
g.Clear(PictureBox1.BackColor);
g.SmoothingMode = SmoothingMode.HighQuality; //高质量
g.PixelOffsetMode = PixelOffsetMode.HighQuality; //高像素偏移质量
/************下面是绘图代码段***********/
for (int k = 1; k < 386; k++)
{
g.FillRectangle(new SolidBrush(Color.Red), m_point[k, 0] - 1, m_point[k, 1] - 1, 2, 2);
}
/***********上面是绘图代码段************/
PictureBox1.CreateGraphics().DrawImage(image, 0, 0);
g.Dispose();
image.Dispose();
方法二:
BufferedGraphicsContext MyBufferedGraphics = new BufferedGraphicsContext();
BufferedGraphics MyBuffer = MyBufferedGraphics.Allocate(PictureBox1.CreateGraphics(),PictureBox1.ClientRectangle);//创建一个缓冲图像MyBuffer
MyBufferedGraphics.MaximumBuffer = new Size(PictureBox1.ClientRectangle.Width,PictureBox1.ClientRectangle.Height);//指定缓冲图像背景类的大小
MyBuffer.Graphics.FillRectangle(Brushes.WhiteSmoke,PictureBox1.CreateGraphics().ClipBounds);//指定图像背景色
MyBuffer.Graphics.Clear(this.BackColor);
/************下面是绘图代码段***********/
for (int k = 1; k < 386; k++)
{
MyBuffer.Graphics.FillRectangle(new SolidBrush(Color.Red), m_point[k, 0] - 1, m_point[k, 1] - 1, 2, 2);
}
/***********上面是绘图代码段************/
MyBuffer.Render();//将画好的圆显示到窗口当中
MyBuffer.Dispose();//释放资源