系统.返回位图的ArgumentException
本文关键字:ArgumentException 位图 返回 系统 | 更新日期: 2023-09-27 18:18:01
相关代码:
private Bitmap GetScreenShot()
{
Bitmap screenImage = null;
using (screenImage = new Bitmap(panelPreview.Width, panelPreview.Height))
{
using (Graphics g = Graphics.FromImage(screenImage))
{
Rectangle rectanglePanelVideoPreview = panelPreview.Bounds;
Point sourcePoints = panelPreview.PointToScreen(new Point(panelPreview.ClientRectangle.X, panelPreview.ClientRectangle.Y));
g.CopyFromScreen(sourcePoints, Point.Empty, rectanglePanelVideoPreview.Size);
}
}
return screenImage;
}
Bitmap screenImage在执行代码并到达
时抛出异常return screenImage
截图由于某些原因,位图的完整性在离开
后失效using (screenImage = new Bitmap(panelPreview.Width, panelPreview.Height))
{...
}
任何帮助都将不胜感激,谢谢。
这是因为代码:
using (screenImage = ...)
{
}
最终处理screenImage
。所以你最终返回的是一个被处理过的对象。
稍微修改一下代码,去掉using
就可以解决这个问题:
private Bitmap GetScreenShot()
{
Bitmap screenImage = new Bitmap(panelPreview.Width, panelPreview.Height))
using (Graphics g = Graphics.FromImage(screenImage))
{
Rectangle rectanglePanelVideoPreview = panelPreview.Bounds;
Point sourcePoints = panelPreview.PointToScreen(new Point(panelPreview.ClientRectangle.X, panelPreview.ClientRectangle.Y));
g.CopyFromScreen(sourcePoints, Point.Empty, rectanglePanelVideoPreview.Size);
}
return screenImage;
}
但是你应该记得调用Dispose
在那个位图上,当你完成使用它。特别是如果这是你经常做的事情
还应该提到,如果Bitmap在返回函数中没有被正确处理,那么像这样返回Bitmap可能会导致内存泄漏。上面Jim的答案将解决您的程序,使其不再有运行时错误,但只要没有正确处理返回的Bitmap, GC可能会延迟返回内存,因此您将不得不手动清理Bitmap, Dispose(),无论它返回到哪里。