предлагает (довольно больно получить работу, но работает в конце концов).

я есть небольшой демонстрационный исполняемый файл, написанный на 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 что Альф также упомянул, сделал именно то, что мне было нужно, спасибо!

Ответы на вопрос(6)

Ваш ответ на вопрос