0

検索でこの「BitBlt」に時々出くわしましたが、使い方がわかりません。

人々の意見によると、これは Windows が表示する画面をキャプチャする最速の方法のようです。しかし、私はそれを機能させていないので、私自身はそれについて何も言えません。

私が少なくとも管理している唯一のことは、この方法を試してみることです:

 gfxBmp.CopyFromScreen(0,0,0,0 rc.Size,CopyPixelOperation.CaptureBlt);

私はそれを使用すると思いますか?(rc.size = 特定のウィンドウのサイズ) 悲しいことに、何もしません。黒い画像が表示されます。ただし、SourceCopy を使用すると機能しますが、それが通常の方法です。

現在、BltBit を使用するためにいくつかのコードを置き換えようとしていますが、うまく機能していません。

    public MemoryStream CaptureWindow(IntPtr hwnd, EncoderParameters JpegParam)
    {
        NativeMethods.Rect rc;
        NativeMethods.GetWindowRect(hwnd, out rc);
        using (Bitmap bmp = new Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
        {

            using (Graphics gfxBmp = Graphics.FromImage(bmp))
            {
                IntPtr hdcBitmap = gfxBmp.GetHdc();
                try
                { 

                    NativeMethods.BitBlt(hdcBitmap, 0, 0, 0, 0, hwnd, 0, 0, 0xCC0020);

                }
                finally
                {
                    gfxBmp.ReleaseHdc(hdcBitmap);
                }
            }
            MemoryStream ms = new MemoryStream();
            bmp.Save(ms, GetEncoderInfo(ImageFormat.Jpeg), JpegParam);

            return ms;
        }
    }
4

1 に答える 1