【发布时间】:2018-04-07 16:19:05
【问题描述】:
我知道当某些东西在调试中起作用但在发布中不起作用时,有一些东西没有正确初始化、使用或清理,但我没有找到。
我首先像这样创建一个 dib 部分:
BITMAPINFO bmi;
HBITMAP bitmap;
LPBYTE pBits;
// Initialize header to 0s.
ZeroMemory(&bmi, sizeof(bmi));
// Fill out the fields you care about.
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = w;
bmi.bmiHeader.biHeight = h;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
HDC dc = GetDC(hw);
bitmap = CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0);
for (int y = 0; y < w*h; y++)
{
pBits[y * 3 + 0] = 200;
pBits[y * 3 + 1] = 200;
pBits[y * 3 + 2] = 200;
}
然后我这样渲染:
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP oldBmp= (HBITMAP)SelectObject(hdcMem, bitmap);
BitBlt(hdc, xabs, yabs, width, height,
hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, oldBmp);
DeleteDC(hdcMem);
在调试模式下,一切都很好,但在发布时,图像是白色的。
另外,如果我使用bitmap = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(idb), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);,图像会正确呈现。
【问题讨论】:
-
改进您的错误检查,以便您准确地知道哪个函数失败了。
-
寻求调试帮助的问题必须包括所需的行为和在问题本身中重现它所需的最短代码。请阅读如何创建minimal reproducible example。