предлагает (довольно больно получить работу, но работает в конце концов).
я есть небольшой демонстрационный исполняемый файл, написанный на C ++, который зависит только от одного 5-килобайтного PNG-изображения, загружаемого до его запуска, которое используется для созданного мной пиксельного текста. Из-за этого одного файла мне нужно было бы выдавать ZIP-архив вместо одного исполняемого файла, что создает достаточное трение между загрузкой и «воспроизведением», которое, я считаю, отговорило бы некоторых попробовать его.
Мой вопросВ любом случае нужно ли встраивать файл PNG (и любой другой файл) в исполняемый файл или исходный код, чтобы он представлял собой один файл, и исполняемый файл мог его использовать?
У меня есть возможность анализировать PNG как поток байтов, поэтому его не нужно преобразовывать в пиксельные данные.
Заранее спасибо! (Существуют и другие вопросы с похожим названием, но они и их ответы, похоже, затрагивают более конкретные вопросы и не очень помогают)
редактироватьКомпилятор - 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 что Альф также упомянул, сделал именно то, что мне было нужно, спасибо!