我想创建一个应用程序,但应用程序将使用图标(位图)来处理某些菜单按钮和其他内容。我想将我的应用程序保存为一个简单的单独的exe文件,这意味着我将以某种方式将所有图标嵌入到应用程序中(Windows上的EXE),这样我就可以加载位图而无需任何外部文件。
有谁知道我该怎么做?
其他一些信息: 我正在使用wxWidgets,目前使用的是MSVC,如果可能的话,我更喜欢使用跨编译器/跨平台的方法。
提前致谢!
答案 0 :(得分:6)
您可以将XPM
格式用于您的位图,因为它很容易嵌入到您的代码中(当然这将在exe中,在您想要的地方;-)。正如the docs所说,
所有wxWidgets平台都支持XPM 用于小位图和图标。你可以 包括XPM内联,如下所示 它是C代码,或者您可以加载它 运行时
(“如下所示”是#include
指令) - 因此,通过采用“include”选项采用这种方法,您将完全是交叉编译器和跨平台。
有关XPM
格式的详细信息,请参阅here。当然,很容易从其他流行格式中找到转换为XPM的转换器。
答案 1 :(得分:1)
Windows确实有资源文件。您可以使用它。或者,您可以编写一个小实用程序,将您的二进制图标转换为C常量数组
例如:
const unsigned int my_icon[] = {0x12345678, 0x87654321, .... };
这可以在perl中轻松完成,然后您可以使用变量my_icon访问该图标。
答案 2 :(得分:0)
因为Linux没有平台解决方案,所以无论如何都必须创建自己的系统。因此,我建议针对平台特定的方法在Windows和macosx上添加资源。
你可以使用FOX GUI Toolkit附带的reswrap是一个简单的工具,可以将任何二进制文件转换为c char文字。如果使用msvc进行编译,很快就会发现包含大量字符串的大型文件对编译器是有害的。我为我的项目添加了大约900个图标,它杀死了编译器。
我目前正在使用一个解决方案,我只需在可执行文件的末尾复制二进制存档。今天的每个平台都可以为您提供可执行路径,如果在可执行文件的末尾添加了额外的数据,则ELF,EXE或Mach-O文件都不关心。
答案 3 :(得分:0)
我们在项目中使用这种技术:
optipng ./image.png
优化您的png文件。png2wx
Perl脚本将二进制图像数据转换为文本。
{
wxMemoryInputStream sm("\211PNG\r\n\032\n\000\000....", 116);
m_bitmap = wxBitmap( wxImage(sm) );
}
不要忘记在wxApp::OnInit()
函数中添加对PNG格式的支持:
wxImage::AddHandler(new wxPNGHandler);
Here是原始教程的链接。
希望这会有所帮助!