CBitmap类主要是加载位图资源,或者建立一个空白位图用于存储画面。

BOOL LoadBitamp(UINT nIDResource)从工程资源中加载一张位图
BOOL LoadOEMBitmap(UINT nIDBitmap)从系统资源中加载一张位图
BOOL CreateBitmap(int nWidth, int nHeigjt, UINT nPlane, UINT nBitCnt, const void* lpBits)根据指定的值创建一张位图
BOOL CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight)根据高宽创建一张兼容位图
BOOL CreateBitmapIndirect(LPBITMAP lpBitmap)根据BITMAP结构体创建一张空白位图
int GetBitamp(BITMAP* pBitmap)根据BITMAP结构体获取位图属性信息
static CBitmap* FromHandle(HBITMAP hBitmap)将HBITMAP句柄转换为CBitamp对象
operator HBITMAP() const从CBitmap对象中获取HBITMAP句柄

BITMAP结构体:

/* Bitmap Header Definition */
typedef struct tagBITMAP
  {
    LONG        bmType;
    LONG        bmWidth;
    LONG        bmHeight;
    LONG        bmWidthBytes;
    WORD        bmPlanes;
    WORD        bmBitsPixel;
    LPVOID      bmBits;
  } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;

装载位图并显示:

① 位图装载   CBitamp::LoadBitmap
② 创建兼容的内存DC     CDC::CreateCompatibleDC
③ 内存DC选择位图对象    CDC::SelectObject
④ 使用贴图函数显示内存DC中的位图内容    CDC::BitBlt
注:若使用压缩或拉伸原始图片则使用   CDC::StretchBlt     

例子:

void CMFC7_7BitmapDlg::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    myBitmap(&dc);
}

void CMFC7_7BitmapDlg::myBitmap(CDC *pDC)
{
    CBitmap bmp;
    bmp.LoadBitmap(IDB_WOLF);
    BITMAP bm;
    bmp.GetBitmap(&bm);// 获得位图的详细信息
    CDC mdc;
    mdc.CreateCompatibleDC(pDC);//创建兼容DC
    mdc.SelectObject(&bmp);//选择位图对象
    pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight, &mdc, 0,0,SRCCOPY);//贴图
    // 压缩或拉伸
    pDC->SetStretchBltMode(HALFTONE); // 设置压缩拉伸方式,效果好
    pDC->StretchBlt(bm.bmWidth,0,bm.bmWidth/2,bm.bmHeight/2, &mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//压缩
    pDC->StretchBlt(bm.bmWidth*2,0,bm.bmWidth*2,bm.bmHeight*2, &mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//拉伸

    pDC->StretchBlt(0,bm.bmHeight,bm.bmWidth,bm.bmHeight, &mdc,bm.bmWidth,0,-bm.bmWidth,bm.bmHeight,SRCCOPY);//左右翻转
    pDC->StretchBlt(0,bm.bmHeight*2,bm.bmWidth,bm.bmHeight, &mdc,0,bm.bmHeight,bm.bmWidth,-bm.bmHeight,SRCCOPY);//上下翻转
    pDC->StretchBlt(0,bm.bmHeight*3,bm.bmWidth,bm.bmHeight, &mdc,bm.bmWidth,bm.bmHeight,-bm.bmWidth,-bm.bmHeight,SRCCOPY);//左右上下翻转

}

                      

12-25 11:53