场景描述:

如果程序中需要使用一张图片,通常会用相对路径方式指定一个外部文件。例如:

loadimage(NULL, "test.jpg");

这样,将编译后的 .exe 和 test.jpg 放在一起,就可以正确加载图片。许多游戏有几十个甚至上千个文件,就是有类似这样的许多外部数据。

但还有一些情况,希望图片能嵌入编译后的 .exe 里面,这样只需要拷贝一个 .exe 文件就能附带上所需图片。本文就介绍这种情况的实现方法。

什么是资源文件:

windows 应用程序是可以包含各种“资源”的,例如:图标、对话框、菜单、快捷键等等,这些资源按照一定的格式,可以和 .exe 链接在一起。

我们所要做的,就是把图片放到资源中,然后从资源中加载图片。

操作步骤:

以英文版的 VC6 和 VC2010 为例,嵌入资源的操作步骤如下:

1. 创建项目

打开 VC6(或 VC2010 等其他版本),建立控制台应用程序,并建立相应 cpp 程序,确保可以正确编译执行。

2. 创建资源文件

对于 VC6:点菜单 File -> New...,选择 Files 中的 Resource Script,并在右侧 File 中写入名称 test,点 OK 添加到项目中。VC 会默认打开 test.rc 文件,先关闭它,我们可以 FileView 找到新添加的 test.rc 文件。双击 test.rc,会在 Workspace 区中打开 Resource View 视图。

对于 VC2010:在 Solution Explorer 中找到 Resource Files,右击,选择 Add -> New Item...,在弹出的新窗口中选择 Resource File (.rc),在 Name 中写入名称 test,点 Add 添加。此时会自动切换到 Resource View 视图的选项卡。

在新打开的 Resource View 视图中,会显示本项目中使用的资源,例如图标、位图、字符串等等。当然,现在还是空的。

3. 添加图片到资源文件中

3-1. 为了整齐,我们在项目路径下建立 res 文件夹,并将图片放入该文件夹内。举例,我们放入一个 bk.jpg 文件。

3-2. 添加 JPG 资源。

对于 VC6:切换到 ResourceView 视图,右击 test resources,选择 Import...,导入 res\bk.jpg 文件。之后在 Custom Resource Type 中为资源取一个类型名称,例如"IMAGE",点 OK。此时 VC 会在"IMAGE"下默认创建一个 IDR_IMAGE1 的资源,并以二进制形式打开。我们暂时关掉它。

对于 VC2010:切换到 Resource View 视图,右击 test.rc,选择 Add Resource...,在弹出的窗口中点 Import... 按钮,选择 res\bk.jpg 文件。之后在 Custom Resource Type 中为资源取一个类型名称,例如"IMAGE",点 OK。此时 VC 会在"IMAGE"下默认创建一个 IDR_IMAGE1 的资源,并以二进制形式打开。我们暂时关掉它。

3-3. 重命名资源。

对于 VC6:右击 IDR_IMAGE1,选 Properties,将 ID 一栏的 IDR_IMAGE1 修改为符合其意义的名称,例如"Background",切忌,一定要加上英文的双引号。这时,资源中可以看到 "IMAGE" / "Background" (注意都有双引号)。

对于 VC2010:选中 IDR_IMAGE1,按 Alt + Enter 显示 Properties,将 ID 一栏的 IDR_IMAGE1 修改为符合其意义的名称,例如"Background",切忌,一定要加上英文的双引号。这时,资源中可以看到 "IMAGE" / "Background" (注意都有双引号)。

4. 加载资源中的图片

加载图片很简单,只需要指定“资源类型”和“资源名称”。例如我们前面的例子,资源类型是 "IMAGE",资源名称是 "Background",将这个图片资源显示在绘图窗体上可以这样做:

loadimage(NULL, _T("IMAGE"), _T("Background"));

最后,编译程序,图片就会自动和 exe 打包在一起。

特殊情况 1:以资源 ID 的形式加载资源图片

使用图片的资源 ID 也是一种常用的加载资源的方法。默认情况下,将图片导入资源后,会自动生成一个 ID,并且会在 resource.h 里面定义这个 ID。这里说的,就是直接引用这个 ID 而不命名为字符串。

为了实现这个目的,需要首先引用资源头文件,然后用宏 MAKEINTRESOURCE 将 ID 转换为字符串。例如加载一个名称为 IDR_BACKGROUND 的资源:

#include "resource.h" …… loadimage(NULL, _T("IMAGE"), MAKEINTRESOURCE(IDR_BACKGROUND));

特殊情况 2:将 BMP 格式的图片嵌入资源

由于 BMP 图片在资源中的情况特殊,导入资源后,会导致文件头丢失,从而引起加载失败。

所以,需要明确指定 BMP 图片的资源类型为其它类型,方法如下:

1. 在资源中导入 test.bmp 图片。默认会导入在 Bitmap 类别下,并命名为 IDB_BITMAP1。作为范例,我们修改这个资源 ID 为字符串“test_bmp”。编译项目,确保没有错误。

2. 以文本方式打开资源文件。

对于 VC6,点菜单 File -> Open...,选中项目的资源文件 test.rc,底部的 Open as 选择 Text,点 Open 打开(如果此时资源视图已打开,会提示“This file is open for resource editing. Continuing will close the resource editor.”,点 OK)。

对于 VC2010,在 Solution Explorer 里面找到资源文件 test.rc,右击,选择 View Code(如果此时资源视图已打开,会提示“The document 'xxx' is already open. Do you want to close it?”,点 Yes)。

这样就可以以文本方式打开资源文件。

3. 在资源文件的文本中,找到这样的内容:

/ // // Bitmap // test_bmp BITMAP DISCARDABLE "test.bmp"

然后将这一行里面的 BITMAP 修改为自己定义的一个类型,例如 IMAGE:

test_bmp IMAGE DISCARDABLE "test.bmp"

然后就可以按照前述方式加载这个图片资源,例如:

loadimage(NULL, _T("IMAGE"), _T("test_bmp"));
转载自:easyx图形库
来自:easyx图形库帮助文件EasyX Graphics Library for C++

分享:

将图片内嵌到 exe 文件中相关推荐

  1. 如何把图片嵌到html中,自给自足,轻松将图片图片内嵌到HTML

    自给自足,轻松将图片图片内嵌到HTML 1.为什么要将图片内嵌到HTML? 针对于这个问题,我们有如下几种答案 1)能减少并发请求,适合且合理的使用,能提高网站的访问速度 2)便于分享,完全可以将需要 ...

  2. Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)

    Demo路径:https://github.com/yanshengjie/RPL.Demo 1. Introduction Razor Page Library 是ASP.NET Core 2.1引 ...

  3. 【转载】关于如何提取Exe文件中PPT源文件的几种方法

    PPT课件,利用PowerPoint Slide Show Converter封装为exe文件后,今天想修改一下其中的内容,只能在转化为ppt文档了,但该死的是PowerPoint Slide Sho ...

  4. Python项目打包后找不到路径问题,将资源文件数据文件打包到exe文件中

    目录 问题描述 Python项目打包后,找不到配置文件路径 1.冻结路径 2.使用方法 将资源文件打包到exe文件中 1.打包前准备 2.返回临时路径 3.使用方法 4.编译打包 问题描述 pyins ...

  5. 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码

    我们进行信息安全编程的时候,经常需要向exe文件插入自己的源代码, 我们如何在代码中实现呢.请见代码与注释讲解 #include <iostream.h> #include <win ...

  6. VB直接播放EXE文件中的声音文件

    使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业. ⑴启动 VB6.0,在"外接程序→外接程序管理器"中加载"Visual Basic ...

  7. 如何从Windows EXE文件中提取图标

    Sometimes you're working on a project and need access to a high-quality version of a Windows 10 appl ...

  8. 使用Dependency Walkers来检查exe文件中缺少的dll

    在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字--动态链接库.现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录, ...

  9. KRSReader酷狗音乐歌词写真图片提取工具(提取KRS文件中的图片)

    最近发现酷狗音乐中的歌词写真图片还是比较给力的,很多友友表示喜欢,但是苦于不懂得如何提取,小菜利用周末闲暇时间写了一个小工具,专门用来提取酷狗音乐歌词写真图片. 废话不多说,软件界面如下: 使用说明: ...

最新文章

  1. 障碍期权定价 python_[宜配屋]听图阁
  2. 管道命令和xargs的区别(经典解释)
  3. 51. N 皇后(回溯算法)
  4. 移动端网页打印代码_WEB移动端怎么是实现Console.log打印
  5. 用js控制选择CheckBoxList
  6. 畅谈程序人生暨孙鑫老师与读者交流会
  7. 前端学习(1880)vue之电商管理系统电商系统之获取左侧菜单数据
  8. visual studio 没有属性页_驯龙物语10月14日更新|新增快捷购买页签
  9. python字符串的方法和列表的方法_Python 中列表和字符串的方法总结
  10. python爬虫网页pdf_爬虫实战【3】Python-如何将html转化为pdf(PdfKit)
  11. window10删除目录时提示没有找到该项目
  12. MYSQL学习笔记2--mysql 静态和动态plugin
  13. 机械臂模糊PID控制matlab仿真
  14. AD10软件如何仿真C语言,基于AD转换模块的单片机仿真和C语言开发设计
  15. xcel Home 数据透视表初级班(10118班)小结第二课时
  16. sails框架条件查询
  17. Windows Server - AD域 副域控
  18. 2022第8届中国大学生程序设计竞赛CCPC威海站, 签到题7题
  19. JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】
  20. 基于HarmonyOS的华为智能手表APP开发实战——Fitness

热门文章

  1. 原型设计 + 用户规格说明书
  2. GA005-185-10
  3. 查看微信中撤回的图片(RIO)
  4. 用python玩转数据慕课答案_大学慕课用Python玩转数据章节测验答案
  5. 服务器重装系统鼠标没反应,重装系统鼠标键盘不能用怎么解决-重装系统鼠标键盘失灵的解决方法 - 河东软件园...
  6. 数据库子查询 含义-分类-语句
  7. 计算机自定义大小修改数值,如何将电脑excel文档中的单元格颜色设置为根据数值大小自动修改...
  8. 智能家居系统模型设计2.0
  9. 锂电池电压和容量关系
  10. 9.9 力扣652. 寻找重复的子树