• BMP图片的加载方式:资源 VS 文件


     在程序中加载位图有很多方法,各有各的好处。这里简单说一下在资源里和文件里加载的区别。

    第一、在资源里加载位图

      这种方法就是在工程里的“资源视图”-->“添加资源”-->"Bitmap"-->"导入位图"

      每个资源都会有一个资源ID,使用位图时就通过资源ID对他进行控制。

      然后在设置背景图片是只需在OnPaint();里添加如下

            CPaintDC dc(this);
            CRect rc;
            GetClientRect(&rc);
    
            CDC memDC;//目标内存
            memDC.CreateCompatibleDC(&dc);//创建内存兼容环境
            CBitmap bmpBackground;
            bmpBackground.LoadBitmap(IDB_BITMAP1);//资源ID
            BITMAP bitmap;
            bmpBackground.GetBitmap(&bitmap);//获取位图
            CBitmap *oldbtimap = memDC.SelectObject(&bmpBackground);
    
            dc.StretchBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//

      这样直接运行就可以显示位图了,但是有个缺点就是,如果位图比较大的话,最终生成的应用程序会很大,位图会包含在exe程序中,如果位图比较多的话,应用程序的大小就比较恐怖了,估计要几十兆了。

    第二、在文件中直接加载

      这种方法用到函数LoadImage();//从文件中加载位图

    1 HANDLE WINAPI LoadImage(
    2   _In_opt_  HINSTANCE hinst,//实例句柄
    3   _In_      LPCTSTR lpszName,//文件名
    4   _In_      UINT uType,//文件类型,包括IMAGE_BITMAP,IMAGE_CURSOR,IMAGE_ICON
    5   _In_      int cxDesired,//这个在加载ICON时使用
    6   _In_      int cyDesired,//
    7   _In_      UINT fuLoad//加载的方式 ,如LR_LOADFROMFILE
    8 );

      使用方法如下:

     1         CPaintDC dc(this);
     2         CRect rc;
     3         GetClientRect(&rc);
     4 
     5         CBitmap bmpBackground;
     6         bmpBackground.DeleteObject();
     7         HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,L"Background.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//加载位图
     8         bmpBackground.Attach(hBitmap);//绑定
     9 
    10         CDC memDC;//目标内存
    11         memDC.CreateCompatibleDC(&dc);//创建内存兼容环境
    12         memDC.SelectObject(bmpBackground.m_hObject);//
    13         dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);

      这种方法加载位图只需将图片和应用程序放在同一个目录下,生成的应用程序不会和位图产生太大的关联,会很小,而且还可以自己替换背景图片。

      总结一下,感觉还是第二种方法比较方便,生成的应用程序很小,位图可以自己替换。

  • 相关阅读:
    Spring AOP原理
    Spring Boot引入Oracle Jar
    Cookie
    资源验证
    HTTP各种特性
    高性能网络编程之IO和NIO阻塞分析
    Http协议基础及发展历史
    Http原理与实践
    设计模式-回顾
    http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
  • 原文地址:https://www.cnblogs.com/songliquan/p/3394292.html
Copyright © 2020-2023  润新知