¿Cómo incrustar un archivo en un ejecutable?

Tengo un pequeño ejecutable de demostración escrito en C ++ que depende solo de que se cargue una imagen PNG de 5 kb antes de que pueda ejecutarse, que se utiliza para un texto de píxel que hice. Debido a este archivo, necesitaría entregar un archivo ZIP en lugar de un solo archivo ejecutable, lo que crea suficiente fricción entre la descarga y el 'juego' que creo que disuadiría a algunos de probarlo.

Mi pregunta es, ¿Hay alguna forma de incrustar el archivo PNG (y cualquier otro archivo realmente) en el ejecutable o en el código fuente para que sea un solo archivo y el ejecutable pueda usarlo?

Tengo la capacidad de analizar el PNG como una secuencia de bytes, por lo que no es necesario convertirlo a datos de píxeles.

¡Gracias por adelantado! (Existen otras preguntas con un título similar a este, pero ellas y sus respuestas parecen entrar en problemas más específicos y no fueron muy útiles)

edita: El compilador es Visual C ++ 2010 y está en Windows (aunque me gustaría evitar las utilidades específicas de Windows para esto)

edit2: La respuesta de Alf parecía ser el método más portátil, así que rápidamente escribí una función para analizar el archivo PNG en un archivo TXT o de encabezado que podría leerse comounsigned char matriz. Parece ser idéntico en este formulario al archivo PNG en sí, pero mi cargador png no aceptará la matriz. Al cargarlo desde la memoria, el analizador PNG toma una(void * buffer, size_t length) si es importante.

El código si quería verlo, pero aún así aceptaré otras respuestas si cree que son mejores que este 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 también mencionó hizo exactamente lo que necesitaba, ¡gracias!

Respuestas a la pregunta(6)

Su respuesta a la pregunta