1

对于我的程序,我需要一种每半分钟截屏一次的方法。我用谷歌搜索并想出了这个方法:

    public static Bitmap CaptureScreen()
    {
        Bitmap BMP = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height,
        System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        Graphics GFX = Graphics.FromImage(BMP);
        GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Seen.PrimaryScreen.Bounds.Y, 0, 0,  Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
        return BMP;
    }

好吧,对于该方法的前 200 次使用,一切正常。然后函数崩溃,CopyFromScreen它说它导致了一个无效的参数异常。我有点困惑为什么那是因为参数没有改变。

难道是函数本身有一个错误?如果是这样,有没有其他方法可以截取屏幕截图?

4

1 回答 1

1

可能有两个单独的失败处置。GraphicsImage/Bitmap实现IDisposable,所以两者的“明显”在这里:

using(Graphics GFX = Graphics.FromImage(BMP)) {
    GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,Seen.PrimaryScreen.Bounds.Y,
        0, 0,  Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
}
return BMP;

但是:您的方法的调用者应该usingCaptureScreen(释放位图的 GDI+ 句柄)的结果,即

using(var screen = CaptureScreen()) {
    // some work here
}
于 2013-05-04T14:16:44.000 回答