2014-10-17 4 views
0

У меня есть этот пользовательский интерфейс, который отображает изображение с помощьюGTKmm: Кодировать изображение в файле?

add(*manage(new Gtk::Image("image.png"))); 

Но приложение тянет его с жесткого диска на каждом Lauch, и если это не там сломано и т.д. Как кодировать image.png так, что Я могу отправить его в код?

+0

Я попытался это: '' 'Glib :: RefPtr рис = Gdk :: Pixbuf :: create_from_file (» image.png "); Gtk :: Image * img = Gtk :: управлять (новый Gtk :: Image (pic)); add (* img); '' ' Но это еще хуже, если изображение отсутствует во время выполнения, это coredumps; Как я могу кодировать image.png, чтобы я мог отправить его в код, поэтому приложение не должно найти/прочитать файл изображения? В GIMP я могу сохранить изображение как «исходный код C» или «C заголовочный файл», но не C++ ... Я тоже пытался. – yPhil

ответ

0

Convert "image.png" to XPM файл; FWIW, стандартный формат XPM является компилируемым кодом C. Но что более важно, есть функции pixbuf и pixmap, которые могут напрямую загружать данные XPM.

1

GResource очень полезен для этого. Он позволяет вам перечислить файлы ресурсов (например, изображения) в файле * .gresource.xml. Затем утилита glib-compile-resources генерирует из нее .c-файл, и вы связываете этот файл .c в своем приложении. Вам потребуются некоторые изменения Makefile.am, чтобы это произошло правильно, но вы можете посмотреть в некоторых существующих проектов, таких, как мой Glom проекта:

https://git.gnome.org/browse/glom/tree/Makefile_glom.am?id=f79223fa7ebbb0cfc12c6a47366136de478d57cb#n44

Вы можете использовать API, такие как Gtk :: Image :: set_from_resource(). Или вы можете получить данные напрямую с помощью API, например g_resources_open_stream(), или даже перебрать все доступные ресурсы с помощью g_resources_enumerate_children().

Вот некоторые соответствующие коммиты из моего Glom проекта:

https://git.gnome.org/browse/glom/commit/?id=f79223fa7ebbb0cfc12c6a47366136de478d57cb

https://git.gnome.org/browse/glom/commit/?id=9cd1b6dab94191abbb9392304e867bddb2bba766

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