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

正文

  一、 实现代码
 

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,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值