0

前回 GDI に足を踏み入れてから数年が経ちましたが、以前にこのような問題が発生したことは覚えていません。例外は発生していませんが、BitBlt は 0 (False) を返しています。GetLastWIN32Error をチェックすると 6 が表示されます。これは無効なハンドルのようです。そして、宛先画像は空白のままです。

SelectObject の呼び出しも追加しましたが、無効なハンドル エラーには影響しませんでした。

私が見逃しているものについて何か考えはありますか?

void MySub()
{
    var bmpSrc = new Bitmap("c:\\temp\\test.bmp", false);
    var bmpDst= new Bitmap(1000, 1000);
    var gSrc = Graphics.FromImage(bmpSrc);
    var gDst = Graphics.FromImage(bmpDst);
    IntPtr HDCSrc = gSrc.GetHdc();
    IntPtr HDCDst = gDst.GetHdc();
    if (!BitBlt(HDCDst, 0, 0, 55, 94, HDCSrc, 0, 0, SRCCOPY))
    {
        int er = Marshal.GetLastWin32Error();
        MessageBox.Show(er.ToString());
    }
    gDst.ReleaseHdc(HDCDst);
    gSrc.ReleaseHdc(HDCSrc);
    pictureBox1.Image = iDst;
}

public static long SRCCOPY = 0x00CC0020;

[DllImport("gdi32.dll", CallingConvention = CallingConvention.ThisCall, SetLastError = true)]
public static extern bool BitBlt(
     IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, long dwRop);
4

3 に答える 3