我有这个方法应该截取屏幕截图并将图像返回给调用方法.
public static Bitmap TakeScreenshot(int x, int y, int height, int width)
{
Rectangle bounds = new Rectangle(0, 0, height, width);
Bitmap bitmap;
using (bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(x, y), Point.Empty, bounds.Size);
}
}
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试保存图片时:
Bitmap bitmap = MyClass.TakeScreenshot(0, 0, 200, 200);
bitmap.Save(@"C:\test.jpg", ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
然后我在save-method上得到一个错误.
ArgumentException未处理.参数无效.
如果我尝试将其保存在这样的方法中,它工作正常:
public static Bitmap TakeScreenshot(int x, int y, int height, int width)
{
Rectangle bounds = new Rectangle(0, 0, height, width);
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(x, y), Point.Empty, bounds.Size);
}
bitmap.Save(@"c:\begin.tiff", ImageFormat.Tiff);
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
在您的第一个示例中,Bitmap已通过using声明处理,然后您将保存.
在第二个示例中,您将在处置之前保存.
您需要做的就是不将位图包装在using语句中,而是将其留给垃圾收集器,或者.Dispose()在保存之后调用.
就个人而言,对于实现IDisposable界面的项目,我倾向于确保Dispose被调用,除非我的用法要求保持它的存活.
| 归档时间: |
|
| 查看次数: |
5144 次 |
| 最近记录: |