如何通过在桌面上绘制来进行屏幕截图区域选择
本文关键字:屏幕截图 区域 选择 绘制 何通过 桌面 | 更新日期: 2023-09-27 18:27:35
我想制作一个SS应用程序。但我对这个问题有意见。我希望用户能够选择一个特殊的区域来截图。我还希望在用户选择区域时桌面处于活动状态。例如,用户想要拍摄视频的特定帧的SS。用户必须能够在播放视频时执行此操作。我已经尝试过直接在桌面上绘图。但它闪烁得太多了。我该如何解决这个问题,或者有其他方法吗?
我的代码:
[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
Start();
}
IntPtr handle;
Graphics grp;
void Start()
{
handle = GetDC(IntPtr.Zero);
grp = Graphics.FromHdc(handle);
grp.SmoothingMode = SmoothingMode.HighQuality;
timer2.Start();
}
private void timer2_Tick(object sender, EventArgs e)
{
grp.DrawLine(Pens.Red, 0, Cursor.Position.Y, Screen.PrimaryScreen.Bounds.Width, Cursor.Position.Y);
InvalidateRect(IntPtr.Zero, IntPtr.Zero, false);
}
创建具有半透明(或完全透明)背景的表单,该背景始终位于顶部,无边框,大小与桌面相同。在该表单上执行任何屏幕截图矩形选择图形(例如,所选矩形+辅助线+放大镜,完全不透明)。当用户进行选择时,隐藏表单并进行屏幕截图。