代码之家  ›  专栏  ›  技术社区  ›  Tamir

WinForms(.NET)的屏幕截图选取器组件

  •  0
  • Tamir  · 技术社区  · 16 年前

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

    用户将无法将此“相机”移出窗体,在从图像控件中选取部分图像后,无论如何,相机都会用特殊的图层对复制的区域进行彩色标记或剪切。

    我会感谢您的任何想法,并得到您对建议的组成部分的意见。

    我们正在使用.NET FX 3.5和WinForms应用程序。

    谢谢!

    1 回复  |  直到 16 年前
        1
  •  1
  •   Chris Judge    16 年前

    在表单构造函数中(在initializecomponent();call之后),添加:

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

    现在将以下内容添加到表单类中:

    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) {
    
    }
    

    您必须添加您想要对所选区域执行的任何操作。您可以将其复制到另一个图片框,将其保存为位图。