如何返回位图类型?

Kas*_*sen 2 c# bitmap

我有这个方法应该截取屏幕截图并将图像返回给调用方法.

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)

我在这里错过了什么?

Ada*_*rth 7

在您的第一个示例中,Bitmap已通过using声明处理,然后您将保存.

在第二个示例中,您将在处置之前保存.

您需要做的就是不将位图包装在using语句中,而是将其留给垃圾收集器,或者.Dispose()在保存之后调用.

就个人而言,对于实现IDisposable界面的项目,我倾向于确保Dispose被调用,除非我的用法要求保持它的存活.