Winforms (.NET) 的屏幕截图选择器组件

Posted

技术标签:

【中文标题】Winforms (.NET) 的屏幕截图选择器组件【英文标题】:Screenshot picker component for Winforms (.NET) 【发布时间】:2010-11-21 05:49:16 【问题描述】:

我正在寻找一个工具/控件/组件,我可以使用它来定位我的 win 表单的图像控件,它会从用户将选择的特定区域中选择一个屏幕截图。

用户将无法将此“相机”移出表单,并且在从图像控件中选择部分图像后,我需要相机将通过特殊图层着色或剪切来标记复制区域出去,无论如何。

感谢您提出任何想法并听取您对建议组件的意见。

我们正在使用带有 Winforms 应用程序的 .NET fx 3.5。

谢谢!

【问题讨论】:

【参考方案1】:

在您的 Form 构造函数中(在 InitializeComponent(); 调用之后),添加:

monitor.MouseMove += new MouseEventHandler(monitor_MouseMove);
monitor.MouseLeave += new EventHandler(monitor_MouseLeave);
monitor.MouseClick += new MouseEventHandler(monitor_MouseClick);

现在将以下内容添加到您的 Form 类中:

const int adjustX = -50;
const int adjustY = -50;

public Size boxSize = new Size(100, 100);
public int lastX = 2 * adjustX;
public int lastY = 2 * adjustY;

private void monitor_MouseMove(object sender, MouseEventArgs e) 
  if (e.X != lastX || e.Y != lastY) 
    Graphics g = monitor.CreateGraphics();

    g.CopyFromScreen(monitor.PointToScreen(new Point(lastX + adjustX, lastY + adjustY)), new Point(lastX + adjustX, lastY + adjustY), boxSize, CopyPixelOperation.DestinationInvert);

    lastX = e.X;
    lastY = e.Y;

    g.CopyFromScreen(monitor.PointToScreen(new Point(e.X + adjustX, e.Y + adjustY)), new Point(e.X + adjustX, e.Y + adjustY), boxSize, CopyPixelOperation.DestinationInvert);
  


void monitor_MouseLeave(object sender, EventArgs e) 
  Graphics g = monitor.CreateGraphics();

  g.CopyFromScreen(monitor.PointToScreen(new Point(lastX + adjustX, lastY + adjustY)), new Point(lastX + adjustX, lastY + adjustY), boxSize, CopyPixelOperation.DestinationInvert);

  lastX = 2 * adjustX;
  lastY = 2 * adjustY;

最后,在您的鼠标点击处理程序中:

void monitor_MouseClick(object sender, MouseEventArgs e) 


您必须在所选区域添加您想要完成的任何操作。您可以将其复制到另一个图片框,将其保存为位图,无论如何。

【讨论】:

以上是关于Winforms (.NET) 的屏幕截图选择器组件的主要内容,如果未能解决你的问题,请参考以下文章

C# Winforms 按钮到 Windows 中的特定屏幕

.NET WinForms 的月份选择器 [重复]

Winforms禁用数据预览

如何在 Linux 上运行 .Net 核心 WinForms 应用程序

Asp.net webform 控件是不是具有像 Winforms 控件一样的最高功能?

Mac:屏幕截图选择实现? (能够选择屏幕的一部分)