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

相关文章
|
1月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
80 0
|
1月前
|
机器学习/深度学习 人工智能 编解码
极智AI | 教你用C++实现一般模型推理图片预处理模块
大家好,我是极智视界,本文介绍了用 C++ 实现一般模型推理图片预处理的方法,通用性较强。
167 0
|
8月前
|
数据采集 存储 监控
C++下载器程序:如何使用cpprestsdk库下载www.ebay.com图片
本文介绍了如何使用C++语言和cpprestsdk库编写一个下载器程序,该程序可以从www.ebay.com网站上下载图片,并保存到本地文件夹中。为了避免被网站屏蔽,我们使用了亿牛云爬虫代理服务提供的代理IP地址,以及多线程技术提高下载效率。
C++下载器程序:如何使用cpprestsdk库下载www.ebay.com图片
|
1月前
|
测试技术 API C++
C/C++ 实现动态资源文件释放
当我们开发Windows应用程序时,通常会涉及到使用资源(Resource)的情况。资源可以包括图标、位图、字符串等,它们以二进制形式嵌入到可执行文件中。在某些情况下,我们可能需要从可执行文件中提取自定义资源并保存为独立的文件。在这篇博客文章中,我们将讨论如何使用C++和WinAPI实现这个目标。首先,让我们考虑一个场景:我们有一个 Windows 应用程序,其中包含了一个自定义的二进制资源比如默认的配置文件,我们希望将这个资源提取出来并保存为一个独立的文件以用于初始化程序配置项。为了实现这个目标,我们可以使用`Windows API`提供的相关函数,来完成对资源的释放工作。
62 0
|
7月前
|
SQL 关系型数据库 MySQL
8、Linux C/C++ 实现MySQL的图片插入以及图片的读取
8、Linux C/C++ 实现MySQL的图片插入以及图片的读取
53 0
|
9月前
|
C++ 计算机视觉 Python
vs qt opencv c++图片相片查看编辑工具Image Viewer Image Editer
vs qt opencv c++图片相片查看编辑工具Image Viewer Image Editer
151 0
|
10月前
|
存储 C++
|
11月前
|
Linux 计算机视觉 C++
C++ 结合 opencv读取图片与视频
操作系统: Linux(采用远程服务器主机进行代码编写) 需提前配置(安装)cmake 远程连接服务器进行操作, 直接新建立的终端输入
189 0
|
11月前
|
C++
C++实现对RGB图片进行编码
介绍了如何利用得到的RGB信息重新对RGB图片进行编码,以及对其他图片如BMP所得到的RGB信息进行编码从而得到*.jpg文件。
131 0
|
编译器 C++
C++ 抓取和批量下载网站上的图片或文件
C++ 抓取和批量下载网站上的图片或文件
266 0