3

スクリーンショットを画像ファイルに保存するために BitBlt を一度使用しました (.Net Compact Framework V3.5、Windows Mobile 2003 以降)。うまくいきました。ここで、ビットマップをフォームに描画したいと思います。を使用できthis.CreateGraphics().DrawImage(mybitmap, 0, 0)ましたが、以前のように BitBlt で動作し、パラメーターを交換するだけでよいかどうか疑問に思っていました。だから私は書いた:

[DllImport("coredll.dll")]
public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);

(そしてさらに下へ:)

IntPtr hb = mybitmap.GetHbitmap();
BitBlt(this.Handle, 0, 0, mybitmap.Width, mybitmap.Height, hb, 0, 0, 0x00CC0020);

しかし、フォームは真っ白のままです。何故ですか?私が犯したエラーはどこにありますか? ご意見ありがとうございます。乾杯、デビッド

4

3 に答える 3

2

これらの線に沿って何かを意味しますか?

    public void CopyFromScreen(int sourceX, int sourceY, int destinationX, 
                               int destinationY, Size blockRegionSize, 
                               CopyPixelOperation copyPixelOperation)
    {
        IntPtr desktopHwnd = GetDesktopWindow();
        if (desktopHwnd == IntPtr.Zero)
        {
            throw new System.ComponentModel.Win32Exception();
        }
        IntPtr desktopDC = GetWindowDC(desktopHwnd);
        if (desktopDC == IntPtr.Zero)
        {
            throw new System.ComponentModel.Win32Exception();
        }
        if (!BitBlt(hDC, destinationX, destinationY, blockRegionSize.Width, 
             blockRegionSize.Height, desktopDC, sourceX, sourceY, 
             copyPixelOperation))
        {
            throw new System.ComponentModel.Win32Exception();
        }
        ReleaseDC(desktopHwnd, desktopDC);
    }

参考までに、これは自衛隊のすぐ外です

編集: このスニペットでは明確ではありませんが、BitBlt の hDC はターゲット ビットマップ (ペイント先) の HDC です。

于 2010-01-13T16:49:06.743 に答える
0

this.Handle有効なデバイス コンテキストを参照していますか? 関数の戻り値を確認してみましたBitBltか?

次のことを試してください。

[DllImport("coredll.dll", EntryPoint="CreateCompatibleDC")]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

[DllImport("coredll.dll", EntryPoint="GetDC")]
public static extern IntPtr GetDC(IntPtr hwnd);

IntPtr hdc     = GetDC(this.Handle);
IntPtr hdcComp = CreateCompatibleDC(hdc);

BitBlt(hdcComp, 0, 0, mybitmap.Width, mybitmap.Height, hb, 0, 0, 0x00CC0020);
于 2010-01-13T16:37:16.610 に答える