【问题标题】:Preview screen shot image in a winform在winform中预览屏幕截图
【发布时间】:2013-08-21 23:04:15
【问题描述】:

我正在制作一个截图工具。我已经有了它,这样我的程序就可以用来用鼠标绘制一个矩形并保存该图像。现在我要做的是将生成的图像传输到一个图片框,向用户展示他们在决定保存或其他任何内容之前刚刚捕获的内容。

有没有办法可以做到这一点?

到目前为止,我的屏幕捕获代码使用我的 ScreenCapture 类中的以下代码将捕获的图像保存到剪贴板:

 public static bool saveToClipboard = true;

     public static void CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
     {
         using (Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height))
         {
             using (Graphics g = Graphics.FromImage(bitmap))
             {
                 g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);

                 if (showCursor)
                 {
                     Rectangle cursorBounds = new Rectangle(curPos, curSize);
                     Cursors.Default.Draw(g, cursorBounds);
                 }
             }

             if (saveToClipboard)
             {
                 Image img = (Image)bitmap;
                 Clipboard.SetImage(img);
             }



         }
     }

以前有人做过这样的事情吗?另外,是否可以让图片框自动调整大小,以便使用屏幕截图大小而不是图片框?

更新

除了下面的一些 cmets,我一直在尝试保存我在上面的类中存储的图像并将其传递给图片框。但是当我这样做时没有显示任何内容。我一直在使用的代码是这样的:

在form1.cs上举行:

   public void SetImage(Image img)
    {
        imagePreview.Image = img;
    }

在截屏类中:

       if (saveToClipboard)
        {
          Image img = (Image)bitmap;
          ControlPanel cp = new ControlPanel();
          cp.SetImage(img);
          Clipboard.SetImage(img);
        }

【问题讨论】:

  • 你有Image,你不能用pictureBox.Image = img;吗?
  • 如果我收到您的问题,我不放心:您的应用是否在屏幕上,并且您希望它在截屏时不可见?
  • 是的。我基本上是在尝试重新制作与 windows 一起打包的截图工具。
  • 那为什么不在g.CopyFromScreen()之前隐藏你的窗口,然后再显示呢?
  • 首先为什么这个saveToClipboard布尔值?如果它是假的,那么为什么需要捕获图像?如果它始终为真,那么您在这里根本不需要布尔值!

标签: c# winforms screenshot


【解决方案1】:
ControlPanel cp = new ControlPanel();
cp.SetImage(img);

这不起作用,因为您需要访问正在使用的父表单,而不是创建它的新实例。

查看answer to this question 创建简单的自定义事件,但将图像添加到他们创建的ProgressEventArgs。然后在您的主窗体上,订阅该事件并从那里更新图片框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多