У меня есть небольшой демонстрационный исполняемый файл, написанный на C ++, который зависит только от одного 5-килобайтного PNG-изображения, загружаемого до его запуска, которое используется для созданного мной пиксельного текста.Из-за этого одного файла мне нужно было бы выдавать ZIP-архив вместо одного исполняемого файла, что создает достаточное трение между загрузкой и «воспроизведением», которое, как мне кажется, отговорило бы некоторых попробовать его.
Myвопрос в том, есть ли способ вставить файл PNG (и любой другой файл) в исполняемый файл или исходный код, чтобы он представлял собой один файл, и исполняемый файл может использовать его?
У меня есть возможность анализировать PNG как поток байтов, поэтому его не нужно преобразовывать в пиксельные данные.
Заранее спасибо!(Существуют и другие вопросы с похожим названием, но они и их ответы, похоже, затрагивают более конкретные проблемы и не очень помогают)
edit : компилятор Visual C ++ 2010и это в Windows (хотя я бы хотел для этого избежать специальных утилит для Windows)
edit2 : ответ Альфа показался мне наиболее переносимым методом, поэтому я быстро написал функцию для анализаФайл PNG в TXT или заголовочный файл, который может быть прочитан как массив unsigned char
.Похоже, в этой форме он идентичен самому файлу PNG, но мой загрузчик png не примет массив.При загрузке из памяти анализатор PNG принимает (void * buffer, size_t length)
, если это имеет значение.
Код, если вы хотите увидеть, но я все равно приму другие ответы, если вы считаете, что они лучше, чем этот метод:
void compileImagePNGtoBinary(char * filename, char * output){
FILE * file = fopen(filename, "rb");
FILE * out = fopen(output, "w");
unsigned char buffer[32];
size_t count;
fprintf(out, "#pragma once \n\n static unsigned char TEXT_PNG_BYTES[] = { ");
while(!feof(file)){
count = fread(buffer, 1, 32, file);
for(int n = 0; n < count; ++n){
fprintf(out, "0x%02X, ", buffer[n]);
};
};
fprintf(out, "};");
fclose(file);
fclose(out);
};
Окончательное редактирование : ImageMagick , о котором также упоминал Альф, сделало именно то, что мне было нужно, спасибо!