N Numbrush Descargar

Cómo se guardan por dentro los contornos de un dibujo por números

Ni contornos vectoriales ni relleno por difusión. Lo que suele haber es una segunda imagen cuyos píxeles son identificadores de región, una tira de paleta diminuta y un programa que se ejecuta en la tarjeta gráfica.

Un dibujo para colorear por números son, en el fondo, dos informaciones superpuestas: un dibujo que se ve y un mapa que no se ve. La parte visible son los contornos negros y las cifras. La parte invisible es la que dice, para cada punto de la imagen, a qué región pertenece. Esa segunda capa es la que permite que una pulsación rellene exactamente una zona y no la de al lado.

Hay dos maneras intuitivas de guardar esa información, y la práctica habitual no usa ninguna de las dos. Merece la pena ver por qué, porque las razones explican bastantes comportamientos visibles de estos dibujos.

Por qué no son contornos vectoriales

La primera intuición es guardar cada región como un contorno vectorial, al estilo de un SVG: una lista de curvas cerradas, cada una con su número asociado. Es elegante y funciona bien con veinte regiones. Un mandala de complejidad media tiene entre mil y varios miles, y ahí el modelo se rompe por dos sitios distintos. Averiguar qué contorno contiene un punto obliga a recorrer la lista y resolver una prueba de inclusión por cada candidato, y volver a dibujar la escena implica rasterizar de nuevo miles de trazados en cada fotograma mientras alguien amplía o desplaza el lienzo con el dedo.

Hay además un problema de fidelidad. Estos dibujos suelen partir de una imagen ya rasterizada y segmentada; convertirla a curvas introduce diferencias de un píxel en los bordes, y en este formato un píxel mal asignado es un error visible, porque cada punto tiene que pertenecer a una región y a una sola. Las curvas admiten ambigüedad en el borde; el problema, no.

Por qué tampoco es un relleno por difusión

La segunda intuición es no guardar regiones en absoluto: conservar solo el dibujo de líneas y, cuando alguien pulsa, ejecutar un relleno por difusión, el bote de pintura de cualquier editor de imagen, que se expande desde el punto tocado hasta topar con una línea negra. Tiene el atractivo de no ocupar espacio adicional, y falla por tres motivos a la vez.

El primero es el coste: es un recorrido que puede tocar cientos de miles de píxeles en el peor caso, justo en el instante en que la interfaz tiene que responder sin retraso. El segundo es la fragilidad: depende de que la línea negra esté perfectamente cerrada, y basta un hueco de un píxel para que el color se escape a media imagen. El tercero es el decisivo: el relleno por difusión no sabe qué número tiene la región que está rellenando, y comprobar ese número es justamente lo que hay que hacer.

Lo que se guarda en realidad: una imagen cuyos píxeles son números de región

La solución habitual es una segunda imagen, del mismo tamaño exacto que el dibujo, en la que el valor de cada píxel no representa un color sino un identificador de región. Si se abriera con un visor normal se vería una mancha casi negra y sin sentido, porque los identificadores son números bajos y el visor los interpreta como tonos de gris muy oscuros. Cuando hay más regiones de las que caben en un canal de ocho bits, se reparte el número entre dos canales, por ejemplo la parte baja en el rojo y la alta en el verde, lo que da margen para decenas de miles de regiones sin cambiar de formato.

Con ese mapa, la pregunta de a qué región pertenece un punto deja de ser un cálculo y pasa a ser una lectura: se convierte la coordenada de la pulsación a coordenadas de imagen y se lee el píxel correspondiente. Cuesta lo mismo con veinte regiones que con cinco mil, que es la propiedad que hace viable todo lo demás.

La tira de paleta y el sombreador

Falta saber de qué color pintar cada región. Para eso se guarda una tira diminuta: una textura de unos pocos píxeles de ancho y uno de alto, con un color por número de la paleta, más una casilla reservada para el estado sin rellenar. Una imagen de doce colores ocupa doce píxeles, y cambiar la paleta entera es reescribir esa tira.

El dibujo en pantalla lo hace entonces un programa pequeño que se ejecuta en la tarjeta gráfica, un sombreador, con la misma receta para cada píxel de la pantalla: leer el identificador de región en el mapa, consultar si esa región ya está rellena, y en caso afirmativo tomar el color correspondiente de la tira; si no, dejar el gris de fondo y dibujar encima la línea. El coste de componer un fotograma no depende de cuántas regiones se hayan rellenado ya, lo que explica que la fluidez no empeore a medida que avanza la imagen.

Lo que este diseño cuesta

Nada de esto sale gratis. El mapa de regiones ocupa tanta memoria como la propia imagen, de modo que cada dibujo pesa aproximadamente el doble de lo que aparenta. Los bordes quedan necesariamente duros, porque un píxel del mapa pertenece a una región o a otra y no admite valores intermedios: el suavizado de bordes consiste precisamente en fabricar píxeles ambiguos, y aquí un valor intermedio produciría un identificador de región que no existe.

La posición de cada cifra tampoco sale del mapa. Hay que guardarla aparte, en una lista de coordenadas calculada de antemano, porque el mapa dice dónde está cada región pero no dónde cabe su etiqueta, que es un problema geométrico distinto y bastante más incómodo.

Es una arquitectura poco espectacular y muy antigua: una tabla de consulta, un índice y una operación de coste constante por píxel. Sirve, sobre todo, para entender por qué estos dibujos se comportan como se comportan, con sus bordes secos, su fluidez indiferente al avance y su terquedad a la hora de elegir región.

Preguntas frecuentes

¿Por qué el mapa de regiones no se ve nunca?

Porque no está pensado para mirarlo. Sus píxeles no codifican colores sino identificadores numéricos, y al abrirlo con un visor normal aparecen como grises casi negros indistinguibles entre sí. Es un dato interno que solo tiene sentido leído punto a punto.

¿Por qué un dibujo por números pesa más de lo que parece?

Porque suele haber al menos dos imágenes del mismo tamaño: la que se ve y el mapa de regiones que no se ve. A eso se añaden la tira de paleta, que es minúscula, y la lista de coordenadas de las cifras. La duplicación del tamaño es el precio de poder identificar regiones al instante.

¿Podría hacerse con vectores y quedar mejor?

Quedaría mejor al ampliar, porque los contornos se mantendrían nítidos a cualquier escala. El problema es el coste: identificar la región tocada y redibujar miles de trazados en cada fotograma es mucho más caro que leer un píxel, y en un dibujo con miles de regiones esa diferencia se nota de inmediato.

Pruébalo sobre un lienzo de verdad

Numbrush es colorear por números para adultos: mandalas, rosetones y trabajo geométrico, doce colores por lámina, una lupa para lo estrecho y ninguna penalización por tocar donde no era. Gratis, sin conexión, sin anuncios y sin cuenta.

Descargar en el App Store

Guías relacionadas

Todas las guías