Su tarea es tomar una imagen sRGB de 24 BPP y generar la misma imagen escalada 3x en subpíxeles rojo, verde y azul. La imagen resultante estará hecha completamente de píxeles negros, rojos, verdes y azules puros.
Cada píxel de la imagen de origen, cuando se amplía, produce una disposición de 9 subpíxeles que pueden estar activados o desactivados (es decir, su color respectivo o negro). La disposición específica utiliza tres columnas de rojo, verde y azul, en ese orden, así:
(Tenga en cuenta que los bordes de estos "píxeles" son solo para demostración).
Dado que cada uno de los nueve subpíxeles solo puede activarse o desactivarse, tendrá que cuantificar la imagen de entrada y usar diferentes patrones de subpíxeles para lograr 3 niveles de brillo.
Para cada subpíxel en la imagen:
- Para los niveles de color 0-74, todos los subpíxeles deben ser negros.
- Para los niveles de color 75-134, el subpíxel medio debe ser el color respectivo y los otros dos deben ser negros.
- Para los niveles de color 135-179, el subpíxel del medio debe ser negro y los otros dos deben ser del color respectivo
- Para los niveles de color 180-255, los tres subpíxeles deben ser sus respectivos colores.
Elegí estos rangos de nivel porque es lo que pasó a verse bien
Aplique esta transformación a cada píxel en la imagen y genere la imagen subescalada.
Ejemplos de un solo píxel
rgb (40, 130, 175) producirá este patrón:
rgb (160, 240, 100) producirá este patrón:
Ejemplos de imagen completa
Imágenes procedentes de Wikipedia
Reglas y notas
- La entrada y salida pueden estar en cualquier formato conveniente, ya sean archivos de imágenes reales o (posiblemente anidados) listas de valores RGB.
- Puede suponer que los píxeles están en el espacio de color sRGB con 24BPP.
¡Feliz golf!
fuente
Respuestas:
JavaScript (Nodo, Chrome, Firefox), 111 bytes
Formato de E / S: matriz de
[R,G,B]
valores.Pruébalo en línea! (solo un píxel)
¿Cómo?
Todos los valores de umbral son múltiplos de 15. En lugar de hacer pruebas de comparación explícitas, es un poco más corto probar una máscara de bits donde cada bit representa un intervalo de 15 valores (excepto el bit más significativo que se asigna a un solo valor).
Obtenemos:
000000000111111111
000000111000011111
Comentado
Ejemplo
El siguiente fragmento de código procesa la cabeza de Mona Lisa (64x64). No funciona en Edge.
Mostrar fragmento de código
fuente
Jalea , 27 bytes
[r, g, b]
Pruébalo en línea! Este ejemplo toma una imagen de dos por dos donde el píxel superior izquierdo es el primer píxel de ejemplo, el píxel superior derecho es el segundo píxel de ejemplo, el píxel inferior izquierdo es un píxel negro y el píxel inferior derecho es un blanco píxel
¿Cómo?
fuente
3⁼þ¤
realiza un producto externo de[1,2,3]=[1,2,3]
rendimiento[[1=1,2=1,3=1],[2=1,2=2,2=3],[3=1,3=2,3=3]]
que es[[1,0,0],[0,1,0],[0,0,1]]
.Wolfram Language (Mathematica) , 186 bytes
Entrada y salida son listas de valores RGB
Pruébalo en línea!
Wolfram Language (Mathematica), 243 bytes
este segundo código es una función que toma como entrada una imagen y genera una imagen
(no sé por qué las personas se confundieron en los comentarios)
Entonces, si alimentas a este img
en esta función
obtendrás esta salida
fuente
i
es una imagen.C # (compilador interactivo de Visual C #) , 157 bytes
Imprime el RGB de la salida. La salida está separada por una nueva línea y no está alineada. Originalmente, usaba una máscara de bits para
1
estar encendido y0
apagado, pero luego vi la respuesta de Arnauld, y me di cuenta de que usarlo0
como encendido y1
apagado podría ahorrar bytes en el número. El enlace TIO contiene una "imagen" de muestra de 4 por 2 píxeles.Pruébalo en línea!
fuente
APL + WIN, 102 bytes
Solicita una matriz 2D de píxeles como números enteros de 24 bits como aparecerían en la imagen
Pruébalo en línea! Cortesía de Dyalog Classic.
Emite una matriz 2D de enteros de 24 bits de la imagen transformada. La mayor parte del código maneja el formato de la entrada y salida.
Ejemplo: tome una imagen de 2 x 2 compuesta por los píxeles de muestra
Entrada:
Salida:.
fuente
Óxido - 281 bytes
Esta línea es una función que cumple con el desafío, sin embargo, su entrada es en realidad datos en el formato de archivo TGA como se describe en paulbourke.net , junto con el ancho y la altura previamente analizados, en píxeles, de la imagen. Devuelve datos de píxeles para la salida, como bytes, en un vector 9 veces el tamaño de los datos de píxeles de entrada.
Esta segunda línea es una función main () que puede transformar un archivo de entrada llamado i.tga en un archivo de salida llamado o.tga, llamando a la función z desde la primera línea, sin usar ninguna biblioteca externa. Maneja el análisis de ancho / alto, creando un encabezado para el archivo de salida y lectura + escritura de archivos. Agregaría 402 bytes si el desafío requiere E / S de archivo, para un total de 683. Es útil para las pruebas.
fuente