[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方法。

本文转自博客园农民伯伯的博客,原文链接:[WM C++]从资源文件中加载显示png/jpg图片,如需转载请自行联系原博主。

目录
相关文章
|
3月前
|
Linux API C++
超级好用的C++实用库之动态库加载器
超级好用的C++实用库之动态库加载器
31 0
|
5月前
|
Rust NoSQL API
c++开发redis module问题之如果在加载module时,该module没有执行权限,Redis会如何解决
c++开发redis module问题之如果在加载module时,该module没有执行权限,Redis会如何解决
|
5月前
|
NoSQL 编译器 Redis
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
|
7月前
|
缓存
C++11实用技术(五)泛型编程加载dll接口函数
C++11实用技术(五)泛型编程加载dll接口函数
85 0
C++-加载EXCEL数据
C++-加载EXCEL数据
|
API C# C++
C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
原文:C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件       这两天忙着把框架改为支持加载C++和Delphi的插件,来不及更新blog了。      原来的写的框架只支持c#插件,这个好做,直接用c#的反射功能便可。
1117 0