• [WM C++]从资源文件中加载显示png/jpg图片



    前言

      在Windows Mobile项目中大量的贴图确实能贴出非常精美的画面,但是默认支持的bmp格式的背景图片实在太大,800x400的图片大小居然居然达到1M,几个模块背景切换下来,再加上其他零散的小图片整个exe将近10M!看来必须让项目得支持png/jpg格式压缩过的图片。其实之前已经实现从文件加载png/jpg图片的办法,能实现但不理想,图片需要单独发布,且担心图片发布后被用户不小心删除。

    文章

      1.  http://www.arstdesign.com/articles/picloader.html

      2.  http://www.cppblog.com/zhangyq/archive/2008/04/11/46816.aspx

      3.  IImage的图片显示

    正文

      一、 实现代码

    void DrawImage(HDC hdc,RECT& rc,UINT nIDResource,CString lpType)
    {
        HINSTANCE hInst 
    = AfxGetResourceHandle();
        HRSRC hRsrc 
    = ::FindResource(hInst, MAKEINTRESOURCE(nIDResource), lpType); 
        
    if (!hRsrc)
            
    return;
        
        
    //资源大小
        DWORD len = SizeofResource(hInst, hRsrc);
        
    //转换图片资源为字节数组
        BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
        
    if (!lpRsrc)
            
    return;

        IImagingFactory 
    *pImgFactory = NULL;
        IImage 
    *pImage = NULL;

        CoInitializeEx(NULL, COINIT_MULTITHREADED);

        
    if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
                                        NULL,
                                        CLSCTX_INPROC_SERVER,
                                        IID_IImagingFactory,
                                        (
    void **)&pImgFactory)))
        {
            
    if (SUCCEEDED(pImgFactory->CreateImageFromBuffer(lpRsrc,len,BufferDisposalFlagNone,&pImage)))
            {

                pImage->Draw(hdc, &rc, NULL);
                pImage
    ->Release();
            }
            pImgFactory
    ->Release();
        }
        CoUninitialize();
        
        
    //释放资源
        FreeResource(hRsrc);
    }

        代码说明:

          a).  关键部分为将LoadResource转换成BYTE*以及CreateImageFromBuffer方法。

    结束

      研究过程中找了许多文章,大多数都是从文件加载。CxImage也试过了, 在CSDN上找到了据说是可以在WM运行的代码,但是关键方法都不能使用,唯一测试加载成功的是从Buffer加载,同上,但是这样一来代价太大,没有lib文件,还需要自己封装,裸的项目文件将近百个,编译都要老长时间。终于松口气,又完成一个任务 :)

  • 相关阅读:
    JS键盘码值表
    JS入门笔记
    CSS居中的方法总结
    CSS布局模型思考
    条件、循环、函数定义、字符串操作练习
    Python输入输出练习,运算练习,turtle初步练习
    如何理解Comparator接口中的升降序?
    12个非常实用的JavaScript小技巧
    JAVA泛型知识(一)
    开窗函数简介
  • 原文地址:https://www.cnblogs.com/over140/p/1766831.html
Copyright © 2020-2023  润新知