码迷,mamicode.com
首页 > 编程语言 > 详细

MFC中的位图操作

时间:2017-10-21 00:24:11      阅读:251      评论:0      收藏:0      [点我收藏+]

标签: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   位图   

原文地址:http://9233403.blog.51cto.com/9223403/1974474

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!