library functions example c++ c paint

c++ - functions - ¿Cómo codificó esta persona "Hello World" con Microsoft Paint?



graphics h in c (3)

Acabo de ver esto en los últimos días y no puedo entender cómo funciona. El video del que hablo está here :

Es la respuesta más valorada de esta pregunta sobre el desbordamiento de la pila: ¿Por qué este programa fue rechazado por tres compiladores?

¿Cómo es capaz este bitmap de mostrar un programa en C ++ para "Hello World"?


Desde un punto de vista teórico de la informática, sería interesante preguntar si todos los programas se pueden escribir de tal manera que, visto como un mapa de bits, realmente se vea el código fuente que hace lo mismo. Si está interesado seriamente en tales resultados, lea, por ejemplo, sobre el teorema del punto fijo de Kleene .

El programa como una imagen también se puede ver como una forma de ofuscación del código. No es que fuera particularmente práctico ...


Supongo que se refiere a la respuesta a una de las preguntas de April Fools.

Supongo que cada píxel tiene una representación binaria. Y que cada personaje en el código fuente tiene una representación binaria para él.

La persona que creó el programa debe haber resuelto el color de cada píxel que tendría una representación binaria que correspondería a cada carácter.


Una imagen BMP (DIB) está compuesta por un encabezado seguido de 1 color de datos sin comprimir (para 24 imágenes de bpp es de 3 bytes por píxel, almacenado en orden de fila inversa y con 4 bytes de paso de fila).

Los bytes para los datos de color se utilizan para representar colores (es decir, ninguno de ellos está "obligado" por el formato de archivo 2 , todos provienen del color de cada píxel) y existe una correspondencia perfecta 1: 1 entre los colores de píxeles y los bytes escritos en el archivo; por lo tanto, usando colores perfectamente elegidos, puedes escribir lo que quieras en el archivo (con la excepción del encabezado).

Cuando abre el archivo generado en el bloc de notas, los datos de color se mostrarán como texto; aún se puede ver claramente desde el encabezado (la parte de BM hasta el comienzo del texto), que es obligatorio por el formato de archivo.

En mi opinión, este video fue hecho de esta manera: primero el autor calculó el tamaño necesario para el mapa de bits, y creó un archivo DIB del tamaño correcto con un color que se expande a un patrón simple (por ejemplo, todos los bytes 65 => ''A'' ); luego reemplazó dicho patrón con el código de "carga útil", como se muestra en el video.

Sin embargo, tenga en cuenta que no es imposible realizar todo a mano con el bloc de notas: con el cuadro de diálogo selector de color, una tabla ASCII y un conocimiento básico del formato DIB se puede hacer, pero sería mucho más lento y propenso a errores.

Más información sobre el formato DIB

  1. Hay DIB comprimidos RLE, pero en este caso se utilizan mapas de bits no comprimidos (y de todos modos se usan muy raramente).
  2. Con la excepción de la zancada, eso se evitó usando filas múltiples de 4 bytes.