感谢您阅读本文。
我需要绘制由位图信息头和字节数组创建的CBitmap实例。因为我希望他们能够在将来实时操作它。无法使用LoadImage或访问我的硬盘驱动器的此类API。仅限内存操作。
这是我尝试过的。
void CBMPLoaderDlg::drawBitmapFromPath(CString path)
{
CFile file;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
BYTE* bits = NULL;
CBitmap bm;
CDC *clientDC;
CDC memDC;
try
{
if(! file.Open(path, CFile::modeRead))
throw "File not found";
if(file.Read(&bfh, sizeof(BITMAPFILEHEADER)) < sizeof(BITMAPFILEHEADER))
throw "Not bmp file";
if(file.Read(&bih, sizeof(BITMAPINFOHEADER)) < sizeof(BITMAPINFOHEADER))
throw "Not bmp file";
bits = new BYTE[bih.biSizeImage];
if(file.Read(bits, bih.biSizeImage) < bih.biSizeImage)
throw "Not bmp file";
if(! bm.CreateBitmap(bih.biWidth, bih.biHeight, bih.biPlanes, bih.biBitCount, bits))
throw "Could not create bitmap";
clientDC = this->GetDC();
memDC.CreateCompatibleDC(clientDC);
memDC.SelectObject(bm);
clientDC->BitBlt(0, 0, bih.biWidth, bih.biHeight, &memDC, 0, 0, SRCCOPY);
}
catch(char *e)
{
TRACE("%s\n", e);
}
}
标头和字节数组加载正常。 CBitmap也很好。问题是,Bitblt返回TRUE但对话框没有变化。是的,只有在调用OnPain()时才会执行Bitblt。我试过了,结果没有变化。我这样就发布了这个帖子。
我弄错了吗?请帮助一点点。