【问题标题】:How to embed data in an application如何在应用程序中嵌入数据
【发布时间】:2011-03-30 04:12:08
【问题描述】:

我想制作一个应用程序,但该应用程序将使用图标(位图)来显示某些菜单按钮和其他内容。我想将我的应用程序保留为一个简单的独立 exe 文件,这意味着我必须以某种方式将所有图标嵌入到应用程序中(Windows 上的 EXE),这样我就可以在没有任何外部文件的情况下加载位图。

有人知道我该怎么做吗?

只是一些其他信息: 我正在使用 wxWidgets,目前使用 MSVC,如果可能的话,我更喜欢一种可以跨编译器/跨平台工作的方法。

提前致谢!

【问题讨论】:

    标签: c++ visual-c++ cross-platform wxwidgets cross-compiling


    【解决方案1】:

    我们在项目中使用这种技术:

    1. 使用 optipng ./image.png 优化您的 png 文件。
    2. 使用png2wx Perl 脚本将二进制图像数据转换为文本。
    3. 以这种方式将您的图像嵌入到源代码中:
      
      {
          wxMemoryInputStream sm("\211PNG\r\n\032\n\000\000....", 116);
          m_bitmap = wxBitmap( wxImage(sm) );
      }

    不要忘记在 wxApp::OnInit() 函数中添加对 PNG 格式的支持:

    wxImage::AddHandler(new wxPNGHandler);
    

    Here是原始教程的链接。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      因为 Linux 没有针对此的平台解决方案,所以无论如何您都必须创建自己的系统。所以我会建议反对平台特定的方式来在 windows 和 macosx 上添加资源。

      您可以使用 FOX GUI Toolkit 附带的 reswrap ,这是一个将任何二进制文件转换为 c char 文字的简单工具。如果你用 msvc 编译,你很快就会发现带有很多大字符串的大文件对编译器来说是毒药。我为我的项目添加了大约 900 个图标,它杀死了编译器。

      我目前正在使用一种解决方案,我只需在可执行文件的末尾复制一个二进制存档。今天的每个平台都可以为您提供可执行路径,ELF、EXE 或 Mach-O 文件都不关心是否在可执行文件的末尾添加了额外的数据。

      【讨论】:

        【解决方案3】:

        Windows 确实有资源文件。你可以使用它。或者,您可以编写一个小实用程序,将二进制图标转换为 C 常量数组

        例如:

        const unsigned int my_icon[] = {0x12345678, 0x87654321, .... };
        

        这可以在 perl 中轻松完成,然后您可以使用变量 my_icon 访问图标。

        【讨论】:

          【解决方案4】:

          您可以为您的位图使用XPM 格式,因为它很容易嵌入到您的代码中(这当然会在您想要的位置的exe 中;-)。正如the docs 所说,

          所有 wxWidgets 平台都支持 XPM 用于小位图和图标。你可以 包括 XPM 内联如下,因为 它是 C 代码,或者你可以在 运行时

          (“如下”是一个#include 指令)——因此,通过采用这种带有“include”选项的方法,您将成为完美的跨编译器和跨平台。

          有关XPM 格式的详细信息,请参阅here。当然,很容易找到从其他流行格式到 XPM 的转换器。

          【讨论】:

          • @Brad,我相信只有透明度作为开/关选项——而不是实际“阿尔法通道”提供的完整、细致入微的半透明度。
          猜你喜欢
          • 1970-01-01
          • 2014-06-25
          • 2011-08-03
          • 1970-01-01
          • 2011-01-19
          • 2011-09-16
          • 2011-02-06
          • 2018-01-24
          • 2018-03-12
          相关资源
          最近更新 更多