图片加载
VC MFC 提供的 API LoadBitmap / LoadImage 类 CBitmap 等都只能操作 BMP 位图,图标。对于其他常用的 JPG / JPEG / GIF / PNG 格式,它无能为力。VC 下怎样才能加载各种非 BMP 格式的图片呢? 下面介绍一种最简单的办法。
用 CImage 类的 Load 函数加载图片,之后用 Detach 取得 HBITMAP 句柄。取得图片的HBITMAP 句柄后就可以像操作 BMP 图片一样处理 JPG / JPEG / GIF / PNG 格式的图片了。具体代码如下:
#include “atlimage.h”
CImage img;
HRESULT ret = img.Load(filename ); // filename 是要加载的文件名(包含路径)
HBITMAP bitmap = img.Detach(); //像操作 BMP 图片一样处理图片。
在HBITMAP与 CBitmap 间相互转换
1.
HBITMAP转成CBitmap:
HBITMAP hBmp;
//hBmp的初始化代码
CBitmap* pBmp = CBitmap::FromHandle(hBmp);
CBitmap转成HBITMAP:
CBitmap* pBmp;
HBITMAP hBmp = (HBITMAP)(*pBmp);//(HBITMAP)是CBitmap类重载了的操作符.
2.
HBITMAP -> CBitmap:
CBitmap* pcBmp = CBitmap::FromHandle(hBmp);
CBitmpa -> HBITMAP:
HBITMAP hBmp = (HBITMAP)cBmp;
3.
HBITMAP hbmp;
CBitmap bmp;
bmp.Attach(hbmp);
4.
CBitmap::FromHandle() 转换出来的临时 CBitmap 对象似乎并不是可靠的!MSDN 上说这个临时只在某一时间段内有效。等到某个空闲的时候,这个临时 CBitmap 对象会被清除掉。