测试C#GDI+双缓冲高效绘图
```
#region 截图
//获得当前屏幕的大小
Rectangle rect = new Rectangle();
rect = Screen.GetWorkingArea(this);
//创建一个以当前屏幕为模板的图象
Graphics g1 = this.CreateGraphics();
//创建以屏幕大小为标准的位图
System.Drawing.Image MyImage = new Bitmap(rect.Width, rect.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc();
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获
BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
//以JPG文件格式来保存
MyImage.Save("Capture.jpg", ImageFormat.Jpeg);
System.Windows.Forms.MessageBox.Show("当前屏幕已经保存为capture.jpg文件!");
#endregion
#region C#GDI+双缓冲高效绘图
#region temp
//Rectangle rectangle = e.ClipRectangle;//取出次窗体或者画布的有效区的矩形区域
//BufferedGraphicsContext GraphicsContext = BufferedGraphicsManager.Current;//获取程序住缓冲区域的BufferedGraphicsContext(双缓存类,此类用于提供双缓冲的功能)对象
//BufferedGraphics myBuffer = GraphicsContext.Allocate(e.Graphics, e.ClipRectangle);//获取缓冲区
// Graphics g = myBuffer.Graphics;
//指定在呈现期间像素偏移的方式。
//g.PixelOffsetMode = PixelOffsetMode.HighQuality;//高质量低速度呈现
//指定是否将平滑处理(消除锯齿)应用于直线、曲线和已填充区域的边缘。
//g.SmoothingMode = SmoothingMode.HighQuality;// 指定高质量、低速度呈现。
//g.Clear(BackColor);//或者使用invalidate方法==有效区的擦除
//Pen bluePen2 = new Pen(Color.Blue);
测试C#GDI+双缓冲高效绘图--BufferedGraphicsContext
于 2024-05-28 11:49:31 首次发布