Windows的位图有两种类型:一种是GDI位图,另一种是DIB位图。GDI位图是由MFC中的CBitmap类来表示的,是与设备有关的位图。DIB是与设备无关的位图,它自带颜色,并任何运行Windows的机器都可以处理DIB,比GDI优越得多。
CBitmap类封装了Windows的GDI位图操作所需的大部分函数,其中,LoadBitmap是位图的初始化函数,其函数原型如下:
BOOLLoadBitmap(LPCTSTR lpszResourceName);
BOOL LoadBitmap(UINTnIDResource);
该函数从应用程序中调入一个位图资源(由nIDResource或lpszResourceName指定)。若用户直接创建一个位图对象,可使用CBitmap类中的CreateBitmap、CreateBitmapIndirect以及CreateCompatibleBitmap函数,其原型如下:
BOOLCreateBitmap(int nWidth,int nHeight,UINT nPlanes,UINT nBitcount,Const void *lpBits);
该函数从应用程序中调如一个位图资源(由nIDResource或lpszResourceName指定)。若用户直接创建一个位图对象,可使用CBitmap类的CreateBitmap、CreateBitmapIndirect以及CreateCompatibleBitmap函数,其原型如下:
若用户直接创建一个位图对象,可使用:
BOOLCreateBitmap(int nWidth,int nHeight,UINT nPlanes,UINT nBitcount,Const void *lpBits);
此函数用指定的宽度(nWidth)、高度(nHeight)和位模式创建一个位图对象,其中参数nPlanes表示位图的颜色位面的数目;
nBitcount表示每个像素的颜色位个数;
lpBits表示包含位值的短整型数组。若此数组为NULL则位图对象还未初始化
BOOLCreateBitmapIndirect(LPBITMAP lpBitmap);
此函数直接用BITMAP结构来创建一个位图对像。
BOOL CreateCompatibleBitmap(CDC*Pdc,int nWidth,int nHeight);
此函数为某设备环境创建一个指定的宽度(nWidth)和高度(nHeight)的位图对象。由于位图不能直接显示在实际设备中,因此对于GDI位图的显示则必须遵循书327页所列出的步骤。
例:显示BMP位图文件(327)调用一个位图并在视图中显示
1、建一个SDI单文档应用程序
2、InsertàResourceàBitmapàImportà*.*à在系统中找到一个*.bmp文件即:
开始à搜索à文件或文件夹à找到一个.bmp文件拷贝到*.*框里àimportàID
为 IDB_BITMAP1
3、在 OnDraw(CDC *pDC)函数里加以下代码:
CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_BITMAP1);
BITMAP bm;
m_bmp.GetObject(sizeof(BITMAP),&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap*pOldbmp=dcMem.SelectObject(&m_bmp);
pDC->BitBlt(60,60,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldbmp);
4、运行后,在窗口上就出现了你拷过来的位图(这里是通过位图的ID显示位图)
通过上述代码可以看出:位图的最终显示是通过调用CDC::BitBlt函数来完成的。除此之外,也可以使用CDC::StretchBlt函数。这2个函数的区别在于:StretchBlt函数可以对位图进行缩小或放大,而BitBlt则不能,但BitBlt的显示更新速度较快。它们的原型如下(328)页:
BOOL BitBit(int x,int y,int nWidth,intnHeight,CDC *pSrcDC,int xSrc,int ySrc,DWORD dwRop);
BOOL StretchBlt(int x,int y,int nWidth,intnHeight,CDC *pSrcDC,int xSrc,int ySrc,int nSrcWidth,intnSrcHeight,DWORD dwRop);
参数:x、y表示位图目标矩形左上角的x、y逻辑坐标值;
nWidth、nHeight表示位图目标矩形的逻辑宽度和高度, pSrcDC表示源设备CDC指针
xSrc、ySrc表示位图源矩形的左上角的x、y逻辑坐标值
dwRop表示显示位图的光栅操作方式。
光栅操作有很多种,但经常使用的是SRCCOPY,用于直接将位图复制到目标环境中。StretchBlt函数还比BitBit函数多2个:nSrcWidth、nSrcHeight参数,它们是用于表示源矩形的逻辑宽度和高度。
(待完善)