自从我上一次进入GDI已经过去了几年,但我不记得之前有过这样的问题。我没有得到一个异常,但BitBlt返回0(False),检查GetLastWIN32Error显示6.这似乎是一个无效的句柄。目标图像保持空白。BitBlt返回false,GetLastError返回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);
好问题!我实际上看到了Graphics.Draw的性能问题......渲染量和我们碰到的用户数量的规模。我的计划是比较DrawImage和直接调用BitBlt的性能,看它是否值得追求。 – ThatRickGuy 2013-04-30 18:54:36