官网：古典小说网 gudianxiaoshuo.com
官网：你真正需要下载的软件 需要下载站 needdown.com
网站大全
绿色导航

位图

Window位图有两种类型：一种是GDI位图、一种是DIB位图；

GDI位图由MFC中的CBitmap类来表示，是与设备有关的位图。DIB是设备无关的位图。

CBitmap封装了Windows的GDI位图操作所需的大部分函数，其中LoadBitmap是位图初始化函数。

      BOOL LoadBitmap(LPCTSTR lpszResourceName)
      BOOL LoadBitmap(UINT  nIDResource)
       从应用程序中，调用一个位图资源（由nIDResource或lpszRe
      sourceName指定）。

若用户直接创建一个位图对象，可使用CBitmap类中的CreateBitmap\CreateBitmapIndirect\CreateCompatibleBitmap

BOOL CreateBitmap(int nW,int nH,UINT nPlanes,

UINT nBitcount,

Const void * lpBits);

nPlanes 位图的颜色位数目

nBitcount 每个像素的颜色位数目

lpBits 包含位值得短整型数组

BOOL CreateBitmapIndirect(LPBITMAP lpBitmap)

此函数直接用BITMAP结构创建一个位图对象

BOOL CreateCompatibleBitmap(CDC*pDC,int nW,int nH)

此函数为某设备环境创建一个指定宽度高度的位图对象。

由于位图不能直接显示在实际设备中，因此对于GDI位图的显示要遵循以下步骤：

         1) 调用CBitmap类的CreateBitmap\CreateBitmapIndirect\CreateCompatibleBitmap
           创建一个适当的位图对象
         2） 调用CDC::CreateCompatibleDC创建一个内存环境，以
      便位图在内存中保存下来，并与指定设备环境相兼容。
         3） 调用CDC::SelectObject函数将位图对象选入内存设备环境中
         4）　调用CDC::BitBlt或CDC::StretchBlt函数将位图复制
      到实际设备环境中
         5） 使用之后，恢复原来的内存设备环境

示例：

      CBitmap bmp;
       bmp.LoadBitmap(IDB_BITMAP1);
       BITMAP bm;
       bmp.GetObject(sizeof(BITMAP),&bm);

       CDC dcMem;
       dcMem.CreateCompatibleDC(pDC);
       CBitmap *pOldBitmap=dcMem.SelectObject(&bmp);

       pDC->BitBlt(80,80,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);

       dcMem.SelectObject(pOldBmp);

通过上述代码可以看出，位图的最终显示是通过调用CDC::BitBlt函数来完成的。除此之外，也可以使用CDC::StretchBlt函数。

两者区别：StretchBlt可以伸缩，而BitBlt则不能

他们的原型如下：

      BOOL BitBlt(int x,int y,int nW,int nH,CDC* pSrcDC,int nxSrc,int nySrc,DWORD dwRop);

      BOOL StretchBlt(int x,int y,int nW,int nH,CDC* pSrcDC,int xSrc,int ySrc,
                      int nSrcWidth,int nSrcHeight,DWORD dwRop)

                      dwRop   显示位图的光栅操作方式
                      常用的是SRCCOPY  直接将位图复制到目标环境中