WPF - Graphics.CopyFromScreen返回黑色图像

时间:2011-04-18 21:13:29

标签: c# wpf graphics bitmap screenshot

以下方法取自WinForms应用程序。它只是捕获屏幕,但我需要修改它以在WPF应用程序中工作。当我使用它时,它会返回一个黑色图像。尺寸是正确的。我没有任何打开的DirectX或视频,即使在我的桌面上也无法正常工作。

    public static Bitmap CaptureScreen()
    {
        // Set up a bitmap of the correct size

        Bitmap CapturedImage = new Bitmap((int)SystemParameters.VirtualScreenWidth,
            (int)SystemParameters.VirtualScreenHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        // Create a graphics object from it
        System.Drawing.Size size = new System.Drawing.Size((int)SystemParameters.VirtualScreenWidth, (int)SystemParameters.VirtualScreenHeight);

        using (Graphics g = Graphics.FromImage(CapturedImage))
        {
            // copy the entire screen to the bitmap
            g.CopyFromScreen((int)SystemParameters.VirtualScreenWidth, (int)SystemParameters.VirtualScreenHeight, 0, 0,
                size, CopyPixelOperation.SourceCopy);
        }
        return CapturedImage;
    }

有人能以我的方式向我显示错误吗?

2 个答案:

答案 0 :(得分:7)

我相信你需要使用Interop和BitBlt方法。 This blog解释了如何完成此操作,follow-on post说明了如何获取窗口边框。

答案 1 :(得分:2)

我认为g.CopyFromScreen的前两个参数应为0。

这里的代码对我有用:

        var size = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
        var capture = new System.Drawing.Bitmap(size.Width, size.Height);

        var g = System.Drawing.Graphics.FromImage(capture);
        g.CopyFromScreen(0, 0, 0, 0, new System.Drawing.Size(size.Width, size.Height));
        g.Dispose();