关于FreeImage库的问题(怎么把HBITMAP转换成FIBITMAP)

verywzm 2010-12-26 11:24:14
使用的VC6.0

截图后,得到HBITMAP句柄,怎么想用FreeImage库保存为JPG图片。想使用:
FreeImage_Save(FIF_JPEG,pBitmap,"c:\\capture\\try.jpg",50)

但是pBitmap必须是FIBITMAP类型,怎么把HBITMAP转换成FIBITMAP来着?搜索到一个英文的做法,不过不太会改,谁帮我看看,谢谢!

==========以下是搜索到的=============


//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);

...全文
393 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd6814466 2010-12-27
  • 打赏
  • 举报
回复
FIBITMAP *dib = NULL;
if(hbmp) {

BITMAP bm;
GetObject(hbmp, sizeof(BITMAP), (LPSTR) &bm);
dib = FreeImage_Allocate(bm.bmWidth, bm.bmHeight, bm.bmBitsPixel);
这个dib不是FIBITMAP *么?
不就得到了?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧