c++ - 如何将图像作为资源包含在 C++ 可执行文件中?

标签 c++ windows resources

是否可以将图像 (jpeg) 作为资源包含在 win32 c++ 可执行文件中?如果是怎么办?

最佳答案

如果仅适用于 Windows,则使用自定义资源。如果你想要跨平台的东西,那么就按照我最近的项目所做的那样——创建一个应用程序,将 JPEG 编码为头文件中的 char* 缓冲区,然后将这些头文件包含在你的主项目中.您还需要存储缓冲区的大小,因为它肯定会包含 NUL。

例如,我有一个应用程序,您可以在其中传递大量要编码的文件,并且对于每个文件,您都会得到一个如下所示的头文件:

#ifndef RESOURCE_SOMEFILE_JPG_HPP
#define RESOURCE_SOMEFILE_JPG_HPP

namespace resource {

const char* SOMEFILE_JPG[] =
{
  ...raw jpeg data...
};

const int SOMEFILE_JPG_LEN = 1234;

} // resource

#endif // RESOURCE_SOMEFILE_JPG_HPP

应用程序必须以 \x 格式转义特殊的不可打印字符,但这非常简单。该应用程序使用 boost::program_options 库,因此可以将要编码的文件列表存储在配置文件中。每个文件都有自己的标题,类似于上面的内容。

但是,请注意 - 这仅适用于小文件,因为某些编译器对静态字符缓冲区的最大大小有限制。我敢肯定还有其他方法可以做到这一点,但这个方案对我有用(以这种方式存储 HTML、CSS、JavaScript 和图像文件的 C++ 网络应用程序)。

关于c++ - 如何将图像作为资源包含在 C++ 可执行文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/549031/

相关文章:

c++ - 正在使用命名空间标准;强制的

c++ - C++17是基于C17的吗?

c++ - 错误: C2057: expected constant expression

c++ - Windows 下的确定性构建

java - FileNotFoundException 起始 jar - 在资源文件夹中看不到文件

C++ variadic 可变参数模板参数的数量

c++ - c宏扩展错误

c++ - 无法为进程中的所有线程安装 Hook

iphone - 跳过 Xcode iPhone 应用程序的 'CompressResources' 构建步骤

android - 从数据库/网站调用和使用音频、视频和图像文件