自从我上次涉足 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);