【问题标题】:How do you include images as resources in a C++ executable?如何将图像作为资源包含在 C++ 可执行文件中?
【发布时间】:2009-02-15 19:54:56
【问题描述】:

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

【问题讨论】:

  • 您需要澄清您的问题。映像不是可运行的代码,因此未定义将其“编译”为可执行文件。你到底想发生什么?
  • 依赖于操作系统,甚至在所有平台上都没有得到很好的定义,并且在可能的情况下不是特定语言的功能。
  • 似乎这是一个关于 win32 的问题(基于当前接受的答案)。也许应该更新问题以反映这一点?

标签: c++ windows resources


【解决方案1】:

如果只是 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++ Web 应用程序)。

【讨论】:

  • 这就是 QT 对跨平台资源所做的。
  • 合理存储这类数据。得到我的投票。但是它失去了一些使“资源”在支持它们的平台上成为好主意的功能。
【解决方案2】:

这是关于资源文件的 MSDN 文档。

http://msdn.microsoft.com/en-us/library/aa380599(VS.85).aspx

【讨论】:

  • 非常感谢,我在搜索错误的术语(将图像编译成 exe)
【解决方案3】:

也许this 是您要找的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 2016-05-16
    • 1970-01-01
    • 2015-09-02
    • 2014-10-05
    • 2011-06-04
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多