一.三者区别
CBitmap是封装了GDI中的位图的类,并且提供了操纵位图的成员函数。使用CBitmap对象之前要先构造CBitmap对象,调用其中的一个初始化成员函数设置位图对象的句柄。此后就可以调用其它成员函数了。
BITMAP是一个结构体,封装着bitmap的一些信息。定义了逻辑位图的类型,高,宽,颜色格式和位值。
typedef struct tagBITMAP{
LONG bmType; //位图类型,必须为0
LONG bmWidth; //位图宽度
LONG bmHeight; //位图高度
LONG bmWidthBytes; //每一行像素所在的byte数
WORD bmPlanes; //颜色平面数
WORD bmBitsPixel; //像素的位数
LPVOID bmBits; //位图内存指针
}BITMAP;
HBITMAP是bitmap的句柄。
三者之间的关系转换:
HBITMAP hBitmap;
CBitmap bitmap;
BITMAP bm;
//下面是三者之间的联系:
bitmap.Attach(hBitmap);//由HBITMAP 得到关联的CBitmap,即从HBITMAP获得位图
bitmap.GetBitmap(&bm); // 从CBitmap中获得位图信息,并将信息存入bm结构体中。
hBitmap=(HBITMAP)bitmap.GetSafeHandle();//由CBitmap得到相关的HBITMAP
附1. CBitmap::GetBitmap
int GetBimap( BITMAP* pBitMap );
返回值:调用成功时返回非零值,否则为0。
参数: pBitMap 指向BITMAP结构的一个指针,不能为NULL。 说明:本函数用于查看CBitmap对象的信息。返回的信息存放在pBitMap指向的BITMAP结构中。
附2.由于位图是GDI的对象之一,故也可以通过poldBitmap=MemDC.SelectObject(bitmap)来操作位图。(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。
二.CBitmap说明
首先,构造对象,然后初始化初始化CBitmap对象时,常用Cbitmap::LoadBitmap,该函数有两种形式:
BOOL LoadBitmap( LPCTSTR lpszRecourceName ); 其中lpszRecourceName 为VC工程内部已导入的资源名
BOOL LoadBitmap( UINT nIDResource );
最后调用pBmp.DeleteObject();删除由LoadBitmap加载的位图,否则Cbitmap的析构函数将删除该位图对象。注意: 在删除位图对象之前,要保证它没有被选到设备上下文中。
-
CBitmap pBmp;
-
pBmp.LoadBitmap(IDB_BITMAP1);
-
-
CDC dccompatibleDC;
-
dccompatibleDC.CreateCompatibleDC(pDC);
-
CBitmap* poldbmp = dccompatibleDC.SelectObject(&pBmp);
-
-
BITMAP bitmap;
-
pBmp.GetBitmap(&bitmap);
-
pDC->BitBlt(100,100,bitmap.bmWidth,bitmap.bmHeight,&dccompatibleDC,0,0,SRCCOPY);
-
-
dccompatibleDC.SelectObject(poldbmp);//删除位图对象之前,要保证它没有被选到设备上下文
-
-
pBmp.DeleteObject();
另外,可以使用API函数LoadImage加载位图文件,得到位图HBITMAP资源句柄,再与CBitmap对象相连。
-
CBitmap pBmp;
-
//pBmp.LoadBitmap(IDB_BITMAP1);
-
HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), _T("ts.bmp"), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
-
if (NULL!=hBmp)
-
{
-
pBmp.DeleteObject();
-
pBmp.Attach(hBmp);
-
}
-
-
CDC dccompatibleDC;
-
dccompatibleDC.CreateCompatibleDC(pDC);
-
CBitmap* poldbmp = dccompatibleDC.SelectObject(&pBmp);
-
-
BITMAP bitmap;
-
pBmp.GetBitmap(&bitmap);
-
-
pDC->BitBlt(100,100,bitmap.bmWidth,bitmap.bmHeight,&dccompatibleDC,0,0,SRCCOPY);
-
-
dccompatibleDC.SelectObject(poldbmp);
-
-
pBmp.DeleteObject();
阅读(1525) | 评论(0) | 转发(0) |