我有一个字节数组(我通过直接从.bmp读取流然后作为BLOB存储在数据库中),我想在CImageList中显示为图标.因此,我想以某种方式将我的数据加载到HBITMAP或CBitmap中.到目前为止,我已经这样做了,从文件中读取:
hPic = (HBITMAP)LoadImage(NULL, strPath, IMAGE_BITMAP, dwWidth, dwHeight, LR_LOADFROMFILE | LR_VGACOLOR);
...
CBitmap bitmap;
bitmap.Attach(hPicRet);
Run Code Online (Sandbox Code Playgroud)
但显然,这只适用于文件,但不适用于字节数组.我怎样才能得到相同的结果,但是从一个字节数组中读取?
编辑: 请注意,我的数组不仅包含颜色信息,而是包含在磁盘上写入的完整文件,包括所有标题和元数据.在我看来,丢弃所有这些信息是一个坏主意.
Jon*_*Jon 19
假设您已将信息加载到名为bytes的BYTE数组中....
BITMAPFILEHEADER* bmfh;
bmfh = (BITMAPFILEHEADER*)bytes;
BITMAPINFOHEADER* bmih;
bmih = (BITMAPINFOHEADER*)(bytes + sizeof(BITMAPFILEHEADER));
BITMAPINFO* bmi;
bmi = (BITMAPINFO*)bmih;
void* bits;
bits = (void*)(bytes + bmfh->bfOffBits);
HDC hdc = ::GetDC(NULL);
HBITMAP hbmp = CreateDIBitmap(hdc, bmih, CBM_INIT, bits, bmi, DIB_RGB_COLORS) ;
::ReleaseDC(NULL, hdc);
Run Code Online (Sandbox Code Playgroud)
它有点乱,可以使用大量的错误检查,但基本的想法是合理的.