前回 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);