博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WM C++]从资源文件中加载显示png/jpg图片
阅读量:6677 次
发布时间:2019-06-25

本文共 1147 字,大约阅读时间需要 3 分钟。

正文

  一、 实现代码

 

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文件,还需要自己封装,裸的项目文件将近百个,编译都要老长时间。终于松口气,又完成一个任务 :)

本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586567,如需转载请自行联系原作者

你可能感兴趣的文章
【2016-03-17】移动互联网时代,看好你的隐私
查看>>
vi命令集
查看>>
oracle数据库克隆
查看>>
输出 pdf
查看>>
PHPCMS一个BUG
查看>>
APP云测试
查看>>
3-unit3 高速缓存DNS
查看>>
spark mllib 协同过滤算法,基于余弦相似度的用户相似度计算
查看>>
openwrt 基于qmi的 3G|4G拨号
查看>>
俞敏洪励志语
查看>>
开源|基于TensorFlow的聊天机器人-ErGo
查看>>
lucene4.0入门1
查看>>
Svn结合hook实现自动更新及多Project管理更新
查看>>
sgu 222
查看>>
让spring-data-jpa解放你的DAO
查看>>
58沈剑:架构师的平凡之路
查看>>
Hibernate问题-read-write缓存策略
查看>>
sql中实现汉字的拼音首字母查询
查看>>
Android 动态布局 (代码布局)
查看>>
MYSQL备份和恢复
查看>>