最近在使用屏幕截图工具的时候发现放大镜的功能有点小问题,准星和实际鼠标位置对不上,取到的颜色并不鼠标所在的点颜色,所以去看“C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能”的代码,发现之前的代码实现效率上应该有问题,所以就试试优化了一下,经过对比相差十几倍。
之前的算法逻辑是:
1、根据放大镜的大小计算需要的原图尺寸,复制到新建的Bitmap;
2、创建一个新的Bitmap保存放大后的图片;
3、采用四层循环通过“GetPixel”获得源像素颜色,通过“SetPixel”设置放大后目标区域颜色;
优化后的逻辑:
1、根据放大镜的大小计算需要的原图尺寸,获取原图在整个屏幕图片上的坐标点;
2、声明单像素放大的区域“zoomRect”,1:10放大,所以Reatangle大小是10*10;
3、声明画笔对象;
4、双层循环,直接从屏幕图片上取像素点的颜色,通过“FillRectangle”方法对像素进行放大绘制到放大镜的对应显示区域;
优化后的代码:
long drawBegin = DateTime.Now.Ticks;
//绘制放大镜中的图像
int infoAreaHeight = 32;
Size srcSize = new System.Drawing.Size((int)(this.ZoomBoxWidth / 10), (int)(this.ZoomBoxHeight / 10));
Point srcPoint = new Point(MousePosition.X - 5, MousePosition.Y - 4);
if (!isCuting)
{
label1.Text = "!isCuting";
srcPoint = new Point(MousePosition.X - 6, MousePosition.Y - 5);
}
Rectangle zoomRect = new Rectangle(0, 0, 10, 10);
Brush