MFC中的位图操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中的位图操作相关的知识,希望对你有一定的参考价值。

MFC中的位图操作,涉及三个概念:CBitmap,HBitmap,BITMAP.

1.BITMAP是位图的基本数据结构,封装位图信息,包括颜色,大小,位值,数据等

typedef struct tagBITMAP
{ 
     int      bmType;
     int      bmWidth;   //宽
     int      bmHeight;  //高
     int      bmWidthBytes;
     BYTE     bmPlanes;
     BYTE     bmBitsPixel;
     LPVOID   bmBits;
}  BITMAP;

2.HBitmap是位图句柄,可以通过API函数LoadImage加载文件得到,LoadImage得到的句柄为通用类型即,HANDLE.需要转换成具体的资源类型,如:

HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, 
        _T("1.bmp"), 
        IMAGE_BITMAP, 
        0, 0, //原始大小
        LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE);
//或者另外一个API函数,此函数仅从资源中加载位图
HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance,
MAKETRESOURCE(IDB_BITMAP1);

3.CBitmap是对BITMAP进行类的封装.

CBitmap有两个重载的成员函数:

BOOL LoadBitmap( LPCTSTR lpszResourceName ); //从硬盘加载位图

BOOL LoadBitmap( UINT nIDResource );         //从资源加载位图

调用方法如下:

CBitmap  m_bitmap;
m_bitmap.LoadBitmap(_T("1.bmp"));//从文件加载

三者之间的转换关系:

HBITMAP hBitmap;
CBitmap m_bitmap;
BITMAP  bm;
//下面是三者之间的联系:
m_bitmap.Attach(hBitmap);//HBITMAP句柄关联到CBitmap
hBitmap=(HBITMAP)m_bitmap.GetSafeHandle();//由CBitmap得到相关的HBITMAP
m_bitmap.GetBitmap(&bm); //由CBitmap得到关联的BITMAP

要显示位图,这三者都会用到,如下:

CBitmap  m_Bitmap;//位图类加载
m_Bitmap.LoadBitmap(_T("1.bmp"));

CDC MemDC;        //创建位图DC
MemDC.CreateCompatibleDC(NULL); 
MemDC.SelectObject(&m_Bitmap); 

CPaintC dc(this); 

BITMAP BM;        //位图信息
m_Bitmap.GetObject(sizeof(BM),&BM); 

dc.BitBlt ( 0,0,                    //目标设备逻辑横、纵坐标 
            BM.bmWidth,BM.bmHeight, //显示位图的像素宽、高度 
            &MemDC,                  //待显示位图数据的设备情境对象 
            0,0,                    //源数据中的横、纵坐标
            SRCCOPY);                //位操作方式


以上是关于MFC中的位图操作的主要内容,如果未能解决你的问题,请参考以下文章

将位图添加到 MFC 中的按钮

MFC内存显示位图

在 MFC 中保存位图时出错

在mfc中从中心缩放位图图像

mfc里给picture控件加载一张位图,然后在位图上画一条线,该怎么做

MFC中透明位图原理