WPF实现屏幕异形区域截图。可拖动锚点指定不规则屏幕区域
屏幕监控程序,需要实现用户自定义多边形区域变动监控。实现多边形区域屏幕截图,才能进行变动对比。
思路:
- 先获取多边形对应的外部矩形,这样可以最小化截取,效率高,速度快
- 根据多边形,生成Region对象。用来裁剪截图
- 采用ExcludeClip方式,填充矩形,这样可以保留Region内部图像
关键代码如下,
其中,_si是截图参数。
特别注意:Clip只对绘图操作有用,Copy操作不起作用!!
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap((int)_si.bmpWidth, (int)_si.bmpHeight);
System.Drawing.Graphics g1 = System.Drawing.Graphics.FromImage(bmp);
// region截图
var gp = new GraphicsPath();
gp.AddPolygon(_pf);
g1.ExcludeClip(new System.Drawing.Region(gp));
g1.CopyFromScreen((int)_si.sourceX, (int)_si.sourceY, 0, 0, new System.Drawing.Size((int)_si.bmpWidth, (int)_si.bmpHeight));//目标起始点是0,0
// 外部用纯色 不常用的颜色
g1.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.Green),
0, 0, bmp.Width, bmp.Height);