2

我正在尝试将用户的整个桌面捕获为图像。我通过以下方式执行此操作:

        public Bitmap CaptureScreen()
    {
        // Set up a bitmap of the correct size
        Bitmap CapturedImage = new Bitmap((int)SystemInformation.VirtualScreen.Width,
            (int)SystemInformation.VirtualScreen.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        // Create a graphics object from it
        System.Drawing.Size size = new System.Drawing.Size((int)SystemInformation.VirtualScreen.Width, (int)SystemInformation.VirtualScreen.Height);

        using (Graphics g = Graphics.FromImage(CapturedImage))
        {
            // copy the entire screen to the bitmap
            g.CopyFromScreen(0, 0, 0, 0,
                size, CopyPixelOperation.SourceCopy);
        }
        return CapturedImage;
    }

但是,如果我尝试将PixelFormatfrom更改Format32bppArgbFormat16bppArgb1555,它会产生一个OutOfMemoryException,我不太明白,考虑到我降低了质量。

有任何想法吗?或者我怎样才能降低这个图像的质量(因为它会以相当频繁的时间间隔通过网络发送)

4

1 回答 1

7

来自文档:(也相关

如果图像具有以下任何像素格式,此 [ FromImage()] 方法也会引发异常。

  • 不明确的
  • 不关心
  • 格式16bppArgb1555
  • 格式16bpp灰度

在“相关”链接中,msdn 继续说:

这里唯一的问题是 OutOfMessageException 在这种情况下不是非常准确的异常类型。我们会考虑在 VS2010 之后的版本中修复它。

于 2012-07-06T19:26:41.907 回答