我正在尝试在我的 WPF 应用程序中集成屏幕截图抓取功能,我希望它看起来像截图工具。
到目前为止,我已经通过创建一个不透明度设置为 0.5 和深色背景的全屏窗口(带有画布)来完成类似的操作。当我单击某处并开始拖动时,会绘制一个白色矩形,产生类似于此的效果。
我想要的是那个矩形的内部在背景画布上打开一个不透明的洞,这样我就可以看到选定的区域——就像截图工具一样。
问题是,对 .NET 来说还很新,我不知道如何或从哪里开始。对屏幕截图窗口的 OpacityMask 字段进行了一些研究和测试,但一无所获。
这里有一个小视频来展示当前的效果。
编辑:另外,作为奖励问题,是否有一种简单的方法来获取跨越多个显示器(虚拟屏幕)的屏幕截图?Graphics.CopyFromScreen()
似乎只适用于 1 个屏幕。
已经解决了这个问题,并且似乎适用于所有可能的奇怪虚拟桌面布局:
// Capture screenie (rectangle is the area previously selected
double left = Canvas.GetLeft(this.rectangle);
double top = Canvas.GetTop(this.rectangle);
// Calculate left/top offset regarding to primary screen (where the app runs)
var virtualDisplay = System.Windows.Forms.SystemInformation.VirtualScreen;
var primaryScreen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
if (virtualDisplay.Left < primaryScreen.Left)
{
left -= Math.Abs(virtualDisplay.Left - primaryScreen.Left);
}
if (virtualDisplay.Top < primaryScreen.Top)
{
top -= Math.Abs(virtualDisplay.Top - primaryScreen.Top);
}