MFC 用Stream读取资源里PNG资源 告别exe文件需要资源跟着

news2024/9/22 1:40:20

在资源视图里添加资源
在这里插入图片描述
导入PNG资源 会自动新建一个PNG的文件夹
在这里插入图片描述
这时候 PNG就已经在资源里了 但是CImage只能通过路径或者流的方式来加载 不能根据ID值
我们就自己写个方法

声明

bool LoadImageFromResource(IN CImage * pImage, IN UINT nResID, IN LPCSTR lpTyp);

实现

bool CMyToolbarDlg::LoadImageFromResource(IN CImage* pImage,
                           IN UINT nResID, 
                           IN LPCSTR lpTyp)
{
    if ( pImage == NULL) return false;

    pImage->Destroy();

    // 查找资源
    HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
    if (hRsrc == NULL) return false;

    // 加载资源
    HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
    if (hImgData == NULL)
    {
        ::FreeResource(hImgData);
        return false;
    }

    // 锁定内存中的指定资源
    LPVOID lpVoid    = ::LockResource(hImgData);

    LPSTREAM pStream = NULL;
    DWORD dwSize    = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
    HGLOBAL hNew    = ::GlobalAlloc(GHND, dwSize);
    LPBYTE lpByte    = (LPBYTE)::GlobalLock(hNew);
    ::memcpy(lpByte, lpVoid, dwSize);

    // 解除内存中的指定资源
    ::GlobalUnlock(hNew);

    // 从指定内存创建流对象
    HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
    if ( ht != S_OK )
    {
        GlobalFree(hNew);
    }
    else
    {
        // 加载图片
        pImage->Load(pStream);

        GlobalFree(hNew);
    }

    // 释放资源
    ::FreeResource(hImgData);

    return true;
}

使用

Image image;
LoadImageFromResource(&image, IDB_PNG1, _T("PNG") );

结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/690574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯专题-试题版-【数列排序】【数列特征】【特殊的数字】【特殊回文数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

Unity 桌面精灵+鼠标穿透

透明功能shader: Shader "Custom/MakeTransparent" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_TransparentColorKey ("Transparent Color Key", Color) = (0,1,0,1)_TransparencyMargin ("Transparency Margin&qu…

Spring Boot中的@GetMapping注解,如何使用

Spring Boot中的GetMapping注解 介绍 Spring Boot是一个流行的Java框架,它提供了许多方便的注解和工具,使得Web应用程序的开发变得更加容易。其中,GetMapping注解是Spring Boot中最常用的注解之一,它可以帮助开发者定义和处理HT…

C# 多张图片合成一张PDF

我是将每张图片转为byte[],再将所有的字节数组转为byte[][],然后对byte[][]进行的处理,大家有其他格式的图片要进行处理的可以先转为上述数据格式。 语种:C# 用到的第三方库:PdfSharp.dll(可直接使用PDFsharp包)&…

C++11右值引用

目录 概念左值和右值左值引用和右值引用 使用左值引用右值引用和移动语义 完美转发万能引用完美转发 概念 左值和右值 左值 左值是一个可以被取地址、修改的对象或变量,其具有固定的内存地址。 左值可以出现在赋值语句的左边,因为它们表示一个可被修…

rabbitmq安装步骤和遇到的问题

一、安装准备工具 1.下载Eralng,下面链接已提供otp_win64_20.2.exe 链接: https://pan.baidu.com/s/1lmvCMPVAV1Ba9UogCdQpZg 提取码:x9m7 2.下载rabbitmq,下面链接已提供rabbitmq-server-3.7.4.exe 链接: https:…

CentOS安装supervisor管理rocketmq进程

一、supervisor 介绍 Supervisor 翻译过来是监管人,在 Linux 中 Supervisor 是一个进程管理工具,当进程中断的时候 Supervisor 能自动重新启动它。可以运行在各种类 Linux/unix 的机器上,supervisor 就是用 Python 开发的一套通用的进程管理程…

【Qt】随记2:CV_Assert的用法

欢迎阅读本博文,本文主要记录Qt学习、工作中的一些注意点及相关笔记📃 希望记录的内容有帮助到你,也欢迎把你知道的分享给大家,一起进步!🎉 喜欢的话,请帮忙点赞👍、评论&#x1f4…

STM32开发指南:逐步揭开嵌入式世界的奥秘

想要深入嵌入式开发领域?掌握STM32这本"天书"?也许你觉得它难以捉摸,但是别担心!我们为你准备了一份简洁明了的指南,将带你逐步解读STM32的奥秘。 首先,我们将介绍STM32的基础知识。从了解STM32…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第六章 身份认证与访问控制)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、身份认证1、身份认证概述2、身份认证常用技术3、常用身份认证机制 二、访问控制1、访问控制概述2、访问控制基本要素 三、访问控制类型四、访问控制机制 一、自学网络安全…

git 常见错误解决

一、git命令运行时出现以下错误提示: git add -A fatal: detected dubious ownership in repository at D:/****/WWW/www.***.cc D:/**/WWW/www.**.cc is owned by:S-1-5-32-544 but the current user is:S-1-5-21-4097290046-3821524887-*****-1001 To add an exce…

B站 Java相关学习资源汇总

一、计算机网络 计算机网络微课堂 https://www.bilibili.com/video/BV1c4411d7jb?p1 讲师:湖科大教书匠 评价:通俗易懂,重点知识十分细致,配合实验,而且有考研408 的难题的讲解,也是非常适合考研党&#…

QT树的实现

理论 在Model/View结构中,数据模型为视图组件和代理组件提供存取数据的标准接口。在QT中,所有的数据模型类都从QAbstactItemModel继承而来,不管底层的数据结构是如何组织数据的,QAbstractItemModel的子类都以表格的层次结构表示数…

Qt中多线程的使用

前言 在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件&a…

快速幂的理解、leetcode剑指 Offer 16. 数值的整数次方解析

0、引言 算法小计:本文阐述以下自己对于快速幂的理解,之前想了很久没想通。 对于求一个数字a的n次方问题:,如果直接写循环,从1开始每次乘以a,求n次即可做出答案,但时间复杂度是O(n)&#xff0c…

陌陌聊天数据分析 (二)

陌陌聊天数据分析 (二) 🏆FineBI构建连接 陌陌聊天数据分析 (一) 新建连接 配置连接 测试连接并保存 🏅数据准备 新建分组 添加业务包 添加表 🥈构建可视化报表 🏈添加…

国内好用的五款低代码平台,你用的哪一款?

随着信息化技术的发展,软件开发领域也在不断更新迭代,在企业数字化升级的浪潮中,低代码平台的应用也越来越广泛。从业务系统到办公软件,从 BI分析到移动开发,越来越多的企业和IT团队开始使用低代码平台来构建数字化应用…

【Nginx】第六章 Nginx配置实例-动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分…

超分布检测中的平衡能量正则化损失

文章目录 Balanced Energy Regularization Loss for Out-of-distribution Detection摘要本文方法Balanced Energy regularization loss 实验结果 Balanced Energy Regularization Loss for Out-of-distribution Detection 摘要 在超分布(out of distribution, OOD)检测领域&a…

express 获取阿里云 oss 文件对象列表

使用 ali-oss 包 pnpm add ali-oss -S 创建 oss 实例,并拉取数据 阿里云 oss 返回示例: