2010-08-15 5 views
3

Я хочу создать приложение, но приложение будет использовать значки (растровые изображения) для некоторых кнопок меню и других вещей. Я хочу, чтобы мое приложение было одним простым, единственным автономным exe-файлом, что означает, что мне нужно будет встроить все значки в приложение (EXE на windows), чтобы я мог загружать растровые изображения без каких-либо внешних файлов.Как вставлять данные в приложение

Кто-нибудь знает, как я могу это сделать?

Только некоторые другие данные: Я использую wxWidgets, в настоящее время с MSVC, и я бы предпочел метод, который работает кросс-компилятор/кросс-платформу, если это возможно.

Заранее благодарен!

ответ

6

Вы можете использовать формат XPM для своих растровых изображений, так как его легко вставлять в ваш код (который, конечно же, будет в exe, прямо там, где вы хотите ;-). Как the docs сказать,

Все WxWidgets платформы поддержки XPMs для маленьких изображений и иконок. Вы может включать в себя XPM инлайн как ниже, так как это код C, или вы можете загрузить его на время выполнения

(далее «ниже» будучи #include директиву) - таким образом, вы бы идеально кросс-компилятор и кросс-платформенный, приняв этот подход с опцией «включить».

Для получения дополнительной информации о формате XPM см. here. Разумеется, легко найти конвертеры в XPM из других популярных форматов.

+0

Поддерживает ли формат XPM альфа-каналы? – Brad

+0

@Brad, только прозрачность как опция включения/выключения, я считаю - не полная, нюансная полупрозрачность, предлагаемая фактическими «альфа-каналами». –

1

У Windows есть файлы ресурсов. Вы можете использовать это. В качестве альтернативы вы можете написать небольшую утилиту, которая преобразует ваш двоичный значок в C константный массив

например:

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

Это может быть легко сделан в Perl, а затем вы можете получить доступ к значку с переменной my_icon.

0

Причина У Linux нет решения для платформы, вам все равно придется создавать свою собственную систему. Поэтому я бы посоветовал использовать специальные способы добавления ресурсов на windows и macosx.

Вы можете использовать reswrap, который поставляется с FOX GUI Toolkit - это простой инструмент для преобразования любого двоичного файла в c char литералы. Если вы скомпилируете с msvc, вы скоро обнаружите, что большие файлы с большим количеством строк являются ядом для компилятора. Я добавил около 900 значков для моего проекта, и он убил компилятор.

В настоящее время я работаю с решением, где я просто копирую двоичный архив в конце исполняемого файла. Каждая платформа сегодня может предоставить вам исполняемый путь, и ни файлы ELF, EXE, ни Mach-O не заботятся о добавлении дополнительных данных в конец исполняемого файла.

0

Мы используем эту технику в наших проектах:

  1. Используйте optipng ./image.png оптимизировать файл PNG.
  2. Преобразование данных двоичного изображения в текст с использованием png2wx Perl-скрипт.
  3. Вставить изображение в исходный код таким образом:
    
    { 
        wxMemoryInputStream sm("\211PNG\r\n\032\n\000\000....", 116); 
        m_bitmap = wxBitmap(wxImage(sm)); 
    }

Не забудьте добавить поддержку формата PNG в вашей wxApp::OnInit() функции:

wxImage::AddHandler(new wxPNGHandler); 

Here ссылка на оригинальный учебник ,

Надеюсь, это поможет!

Смежные вопросы