我正在尝试将用户的整个桌面捕获为图像。我通过以下方式执行此操作:
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;
}
但是,如果我尝试将PixelFormat
从 Format32bppArgb
更改为 Format16bppArgb1555
,它会产生一个 OutOfMemoryException
,考虑到我已经降低了质量,我真的不明白。
有什么想法吗?或者我怎样才能降低此图像的质量(因为它将以相当频繁的间隔通过网络发送)
来自文档:(也相关)
此 [
FromImage()
] 方法也会引发异常,如果图像具有 以下任何像素格式。
- 定义
- 不要在乎
- 格式16bppArgb1555
- 格式16bpp灰度
在"相关"链接中,msdn 继续说:
这里唯一的问题是在这种情况下,OutOfMessageException 不是非常准确的异常类型。我们将考虑在VS2010之后的版本中修复它。