2009-02-14 1 views
4

Возможно ли включать изображения (jpegs) в качестве ресурсов в исполняемый файл win32 C++? Если да, то как?Как вы включаете изображения в качестве ресурсов в исполняемый файл C++?

+0

Необходимо уточнить свой вопрос. Изображение не является исполняемым кодом, поэтому «компиляция» его в исполняемый файл так и не определена. Что именно вы хотите? –

+0

OS зависим, и даже не определена на всех платформах, и где это возможно, не является особенностью конкретного языка. – dmckee

+0

Кажется, это вопросы только о win32 (на основе принятого ответа). Возможно, вопрос должен быть обновлен, чтобы отразить это? – Thomi

ответ

4

Если это 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, поэтому список файлов для кодирования может быть сохранен в файле конфигурации. Каждый файл имеет свой собственный заголовок, похожий на приведенный выше.

Однако будьте предупреждены - это работает только для небольших файлов, поскольку некоторые компиляторы имеют ограничение на максимальный размер, который может быть статическим буфером. Я уверен, что есть другие способы сделать это, но эта схема работает для меня (веб-приложение C++, которое хранит HTML, CSS, JavaScript и файлы изображений таким образом).

+0

Это то, что QT делает для кроссплатформенных ресурсов. –

+0

Разумно хранить данные такого типа. Получает мой голос. Но он теряет некоторые функции, которые делают «ресурсы» хорошей идеей на платформах, которые их поддерживают. – dmckee