MFC--BITMAP HBITMAP CBitmap

 

区分概念:

BITMAP是C++中定义的位图结构体。
HBITMAP是Windows中使用的位图句柄。
CBitmap是MFC封装的位图类

 

定义与使用

HBITMAP指针 从文件中录入指针,得到文件句柄
CBITMAP类 只能下载工程中的位图资源
BITMAP 结构体

 LoadBitmap

        HBITMAP hbmp = LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));//从资源中读取位图数据
        /*
        参数1:HINSTANCE hInstance  资源文件所在的模块的实例句柄
                AfxGetResourceHandle() 获取资源文件所在的模块的实例句柄
        参数2:LPCTSTR lpBitmapName  位图在资源中的ID名称
        返回值:如果函数执行成功,则返回值是指向指定位图的句柄。如果函数执行失败,那么返回值是NULL
        */

 

LoadImage

从资源中获取位图

复制代码
        HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION);//装载图标,光标,或位图
        /*
        参数1:HINSTANCE hinst  资源句柄
        参数2:LPCTSTR lpszName   资源中的ID名称
        参数3:UINT uType  指定被装载图像类型。此参数可以为下列值,其含义如下:
            IMAGE_BITMAP:装载位图
            IMAGE_CURSOR:装载光标
            IMAGE_ICON:装载图标
        参数4:int cxDesired  指定图标或光标的宽度,以像素为单位。
                如果此参数为零并且参数fuLoad值为LR_DEFAULTSIZE,那么函数使用SM_CXICON或SM_CXCURSOR系统公制值设定宽度
                如果此参数为零并且值LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源宽度
        参数5:int cyDesired  指定图标或光标的高度,以像素为单位。
                如果此参数为零并且参数fuLoad值为LR_DEFAULTSIZE,那么函数使用SM_CXICON或SM_CXCURSOR系统公制值设定高度;
                如果此参数为零并且值LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源高度
        参数6:UINT fuLoad  根据下面复合值列表指定函数值,值含义如下:
                LR_DEFAULTCOLOR:缺省标志;它不作任何事情
                LR_CREATEDIBSECTION:当参数uType指定为IMAGE_BITMAP时,使得函数返回一个DIB部分位图,而不是一个兼容的位图。
                        这个标志在装载一个位图,而不是映射它的颜色到显示设备时非常有用
                LR_DEFAULTSIZE:若 cxDesired或cyDesired被设为零,使用系统指定的公制值标识光标或图标的宽和高。
                        如果这个参数不被设置且cxDesired或cyDesired被设为零,函数使用实际资源尺寸。
                        如果资源包含多个图像,则使用第一个图像的大小
                LR_LOADFROMFILE:根据参数lpszName的值装载图像【从文件中加载】。若标记未被给定,lpszName的值为资源名称【从资源中加载】
                LR_LOADMAP3DCOLORS:查找图像的颜色表并且按下面相应的3D颜色表的灰度进行替换
                        颜色替代:Dk Gray RGB(128,128,128)COLOR_3DSHADOW;
                        Gray RGB(192,192,192)COLOR_3DFACELt Gray RGB(223,223,223) COLOR_3DLIGHT LR_LOADTRANSPARENT;
                        找到图像中的一个像素颜色值并且根据颜色表中系统的缺省颜色值替代其相应接口的值。
                        图像中所有使用这种接口的像素的颜色都变为系统的缺省窗体颜色。此至仅用来申请相应的颜色表
                        若fuLoad包括LR_LOADTRANSPARENT和LR_LOADMAP3DCOLORS两个值,则LRLOADTRANSPARENT优先。
                        但是,颜色表接口由COLOR_3DFACE替代,而不是COLOR_WINDOW
                LR_MONOCHROME:装载黑白图
                LR_SHARED:若图像将被多次装载则共享。
                        如果LR_SHARED未被设置,则再向同一个资源第二次调用这个图像时就会再装载一遍这个图像且返回不同的句柄
                        不要对不同标准尺寸的图像使用LR_SHARED
        返回值:HANDLE 如果函数运行成功,返回值是相关资源的数据的句柄。如果函数运行失败,返回值为NULL

        注意:当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、图标以及菜单所占的内存资源;
        加速器表:DesteoyAcceleratorTable;
        位图:DeleteObject;
        光标:DestroyCursor;
        图标:DestroyIcon;
        菜单:DestroyMenu

        该函数不可用来装载jpg等格式图片,可使用gdi+函数GdipDrawImage装载jpg,png等格式图片
        */


        CString str;
        str.Format(_T("hbmp=%d\r\n"), hbmp);
        ::OutputDebugString(str);
复制代码

 

从文件中获取位图 

        HBITMAP hbmp = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tu\\1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE| LR_DEFAULTSIZE| LR_CREATEDIBSECTION);
        /*
        参数2:文件路径
        
        */

 

释放位图 

DeleteObject(hbmp);

 

 Attach 让CWND句柄指向win32API句柄

    HBITMAP hbmp1 = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tubiao\\1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
    CBitmap* pBitmap1;
    pBitmap1->Attach(hbmp1);  //CWND句柄指向win32API句柄
    //通过Detach分离
    

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(796)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2021-12-06 opencv-buildPyramid图像金字塔
2021-12-06 opencv-pyrDown降采样和pyrUp升采样
2019-12-06 我的常用软件
点击右上角即可分享
微信分享提示

目录导航