如何通过在桌面上绘图截屏来选择截屏区域?
How to do a screenshot area selection by drawing on desktop to take screenshot?
我想申请SS。但我对这个问题有疑问。我希望用户能够 select 一个特殊区域来截屏。我还希望桌面在用户 select 访问该区域时处于活动状态。例如,用户想要获取视频特定帧的 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);
}
创建具有半透明(或全透明)背景的窗体,该窗体始终在最前面、无边框且与桌面大小相同。在该表单上做任何屏幕截图矩形选择图形(例如,选定的矩形 + 参考线 + 放大镜,完全不透明)。当用户选择时,隐藏表单并截图。
我想申请SS。但我对这个问题有疑问。我希望用户能够 select 一个特殊区域来截屏。我还希望桌面在用户 select 访问该区域时处于活动状态。例如,用户想要获取视频特定帧的 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);
}
创建具有半透明(或全透明)背景的窗体,该窗体始终在最前面、无边框且与桌面大小相同。在该表单上做任何屏幕截图矩形选择图形(例如,选定的矩形 + 参考线 + 放大镜,完全不透明)。当用户选择时,隐藏表单并截图。