MFC 加载位图

来源:互联网 发布:淘宝网买彩票 编辑:程序博客网 时间:2024/06/05 11:04

     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参数,它们是用于表示源矩形的逻辑宽度和高度。

 (待完善)

0 0