c# 画面キャプチャ WPF-Graphics.CopyFromScreen は黒いイメージを返します。



copyfromscreen 遅い (2)

次のメソッドは、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;
    }

誰も私の方法でエラーを表示することはできますか?

https://ffff65535.com


InteropとBitBltメソッドを使用する必要があると思います。 このブログでは、これがどのように行われたかを説明し、ウィンドウの枠線を取得する方法を示す後続の投稿掲載しています。


私は、g.CopyFromScreenの最初の2つのパラメータは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();




screenshot