Como incorporar um arquivo em um executável?

Eu tenho um pequeno executável de demonstração gravado em C ++ que depende apenas de uma imagem PNG de 5kb sendo carregada antes de poder ser executada, que é usada para um texto de pixel que eu criei. Por causa desse arquivo, eu precisaria fornecer um arquivo ZIP em vez de apenas um arquivo executável, o que cria atrito suficiente entre o download e o 'play' que acredito que dissuadiria alguns de testá-lo.

Minha pergunta é,xiste alguma maneira de incorporar o arquivo PNG (e realmente qualquer outro arquivo) no código executável ou fonte, para que ele seja um único arquivo e o executável possa usá-l

Posso analisar o PNG como um fluxo de bytes, para que ele não precise ser convertido em dados de pixe

Desde já, obrigado! (Existem outras perguntas com um título semelhante a este, mas elas e suas respostas parecem ter problemas mais específicos e não foram muito úteis)

edita: O compilador é o Visual C ++ 2010 e está no Windows (embora eu queira evitar utilitários específicos do Windows para isso)

edit2: A resposta de Alf parecia o método mais portátil, então escrevi rapidamente uma função para analisar o arquivo PNG em um arquivo TXT ou de cabeçalho que poderia ser lido comounsigned char array. Parece ser idêntico, neste formulário, ao próprio arquivo PNG, mas meu carregador png não aceitará a matriz. Ao carregá-lo da memória, o analisador PNG toma uma(void * buffer, size_t length) se importa.

O código, se você quiser ver, mas continuarei aceitando outras respostas, se você achar que elas são melhores que esse método:

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);

};

Final Edit: ImageMagick que Alf também mencionou fez exatamente o que eu precisava, obrigad

questionAnswers(6)

yourAnswerToTheQuestion