19,468
社区成员
发帖
与我相关
我的任务
分享
//How do I convert a HBITMAP to a FreeImage image ?
HBITMAP hbmp;
// ...
// the following code assumes that you have a valid HBITMAP loaded into the memory
FIBITMAP *dib = NULL;
if(hbmp) {
BITMAP bm;
GetObject(hbmp, sizeof(BITMAP), (LPSTR) &bm);
dib = FreeImage_Allocate(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel);
// The GetDIBits function clears the biClrUsed and biClrImportant BITMAPINFO members (dont't know why)
// So we save these infos below. This is needed for palettized images only.
int nColors = FreeImage_GetColorsUsed(dib);
HDC dc = GetDC(NULL);
int Success = GetDIBits(dc, hbmp, 0, FreeImage_GetHeight(dib),
FreeImage_GetBits(dib), FreeImage_GetInfo(dib), DIB_RGB_COLORS);
ReleaseDC(NULL, dc);
// restore BITMAPINFO members
FreeImage_GetInfoHeader(dib)->biClrUsed = nColors;
FreeImage_GetInfoHeader(dib)->biClrImportant = nColors;
}
// ...
// don't forget to call FreeImage_Unload when you no longer need the dib
FreeImage_Unload(dib);