当前位置:C++技术网 > 资讯 > CImage和CBitmap相互转换使用

CImage和CBitmap相互转换使用

更新时间:2015-06-25 00:04:08浏览次数:1+次

CImage 转成 CBitmap:

CImage img; // - 图片对象
CBitmap bmp;// - 位图对象
img.Load(_T("D:\\1.jpg"));// - 加载各种类型的图片
//HBITMAP hBmp1 = img.m_hBitmap;// - 因为是私有的成员变量,所以不能直接赋值,需要通过共有成员函数取出来
HBITMAP hBmp =(HBITMAP)img;// - 自动转换,调用CImage类中的默认的重载的类型转换函数,返回HBitmap类型句柄,而不需要自己调用这个函数
//HBITMAP hBmp =(HBITMAP)img.operator HBITMAP();// - 手动调用类型转换,使用麻烦。
bmp.Attach(hBmp);// - 将返回的位图句柄附加给位图对象
// - bmp使用位图
bmp.Detach();

/* - img对象加载图片后,资源还在img对象中,所以,bmp不要删掉资源对象。 - */
/* - img对象要在bmp使用过程中不能被析构,否则,bmp就得到的位图句柄就无效了。它们共用一个图片资源句柄。 -*/


CBitmap 转 CImage:

CImage img;
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
HBITMAP hBmp = (HBITMAP)bmp.GetSafeHandle();

if(!img.IsNull()) //Attach前,必须确认img中无位图,否则会弹出异常,但忽略也可继续运行
img.Destroy();
img.Attach(hBmp);
/* - 另注:原对象中的位图改变后,所有Attach到这个对象的对象需从新Attach一次,否则图像为初始化的颜色或黑色! - */