bia*_*bit 8 c# wpf screenshot opacitymask
我正在尝试在我的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);
}
Run Code Online (Sandbox Code Playgroud)
您可以创建CombinedGeometry“GeometryCombineMode="Exclude"打孔”效果。样本:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" AllowsTransparency="True"
WindowStyle="None" Background="Transparent">
<Canvas >
<Path Stroke="Black" Fill="White" Opacity=".5">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry Rect="0,0,800,600" >
</RectangleGeometry>
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<RectangleGeometry Rect="50,50,100,100" >
</RectangleGeometry>
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
</Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3210 次 |
| 最近记录: |