En un concurso reciente se retó a los programadores a crear una imagen que contuviera todos los colores RGB exactamente una sola vez. La computadora puede generar hasta 16,777,216 de colores, pues usa tres componentes en sus colores primarios, rojo, verde y azul, cuyos valores pueden ir de 0 a 255 cada uno. Sin embargo, en el concurso se limitó esto haciendo que los colores tuviesen nada más 32 valores. El concurso fue ganado por Jozsef Fejes, con su imagen “Rainbow Smoke” (algo así como humo de arco iris).
Las reglas del reto eran las siguientes:
- Crear una imagen de forma algorítmica puramente
- Usar todos los colores de 15 bits, esto es 32,768 colores que pueden hacerse mezclando 32 rojos, 32 verdes y 32 azules.
- La imagen debía ser de 256×128 pixeles
- No se podía usar imágenes embebidas o entradas externas, peticiones a páginas web, URLs o bases de datos
El concurso tuvo una duración de 7 días y atrajo a muchos concursantes en muchos lenguajes como Processing, Java, Python y C++. Se puede ver el código y las imágenes en ese sitio.
A los participantes se les pidió votar bajo los criterios del código más elegante o el algoritmo más interesante. El ganador fue el programador húngaro, que acumuló 144 votos, usando C#. Su algoritmo lo explica el propio autor de esta manera:
“Puse un pixel al azar en la mitad de la pantalla y entonces empecé a poner pixeles al azar en la vecindad que fuesen parecidos. Se soportan dos modos: el de mínima selección, solamente se considera un pixel en cada momento; el de selección promedfio, 8 pixeles (la vecindad de un pixel en todas las direcciones) se promedian. La selección mínima genera imágenes relativamente ruidosas. La selección promedio por supuesto, genera imágenes más borrosas, pero ambas parecen pinturas reales.
Lo interesante del asunto es que Fejes no se detuvo con su resultado, sino que lo amplió a colores de 24 bits y creó una imagen de 16,777,216 colores. ¡Asombroso!
Fejes dice en su blog cómo progresó de imágenes de 15 bits a 18, 21 y 24 bits. Más aún, liberó su código bajo licencia GPL y produjo el siguiente video en YouTube, que se hizo viral:
Fejes explica: “Naturalmente la compresión de video destruye la posibilidad de tener con precisión todos los colores una sola vez Este video se hizo solamente para verse espectacular, para mostrar cómo se hacían las imágenes. Hay algunos ‘artefactos’ (manchas en las imágenes) en el minuto 2:35, pero esto es precisamente debido a la compresión del video.
Si le interesa, puede comprar las imágenes impresas.
Referencias:
Programming Puzzles & Code Golf
All RGB colors in one image
Source code – Joco Tools