Tuesday, March 27, 2012

Más sobre el creador de iconos


Hace un par de años escribí sobre un programa que hacía iconos. La idea era crear imágenes en formato .ico para usarlas en mis programas. Sin embargo, hallé que el formato de los iconos en Windows no es trivial y que tiene montones de características. La versión de Delphi, la herramienta que uso, tiene un programa para crear iconos de 16x16 pixeles, pero sólo en 16 colores. Evidentemente eso en la actualidad es poco porque el resultado final se ve demasiado simplón ahora que hay tantas tarjetas gráficas que soportan todo tipo de resoluciones, incluso 1080p, que es la alta definición (HD).

Así, un poco sin querer, hallé un sitio que resuelve mis problemas con los iconos en Delphi y crea imágenes con toda la gama de colores e incluso con transparencia (técnicamente el llamado canal alpha). Implementé la solución y finalmente puedo crear iconos en el formato adecuado. Para ello, lo que hice fue lo siguiente:

  • Tomé una imagen en color que quiero procesar
  • Definí diferentes cuadrículas: desde 16x16 hasta 64x64 pixeles, para la imagen resultante
  • Apliqué el filtro mosaico y así tomé un punto de cada recuadro del mosaico como si representara a todos los puntos dentro de dicho recuadro
  • Generé una imagen bmp que puede ser guardada a disco
  • Usando la rutina mencionada, generé el icono en formato .ico.

Cabe decir que crear iconos significa finalmente cambiar el tamaño de la imagen al que uno desea. Hay una serie de técnicas para hacer esto, las cuales son finalmente algoritmos de interpolación, los cuales son adaptivos y no-adaptivos. Los métodos adaptivos pueden cambiar dependiendo qué están interpolando (límites o texturas suaves), mientras que los no-adaptivos toman a todos los pixeles con el mismo tratamiento.

Entre los métodos no-adaptivos están: vecino más cercano (el que usa Paint, de Microsoft, el cual es bastante burdo), bilineal, bicúbico, spline, sinc, lanczos entre otros. Dependiendo de la complejidad de la imagen estos usan de 0 hasta 256 pixeles adyacentes cuando interpolan. Mientras más pixeles adyacentes usan, más preciso es el resultado final aunque como en todo, más procesamiento exige más tiempo de máquina. No se puede tener todo en la vida.

Los algoritmos adaptivos son complicados y muchos programas usan código propietario para realizar esta tarea. La idea de estos algoritmos es minimizar los "artefactos" (que son manchas o pixeles que no deberían verse), y por ende, algunos de estos métodos no se pueden usar para distorsionar o rotar una imagen.

En mi caso, para reducir una imagen, el método mosaico parece ser lo suficientemente bueno, a pesar de ser bastante trivial de implementar.

A quien le interese el software, escríbame a morsa@la-morsa.com y se lo mando de forma gratuita a su correo de inmediato.

No comments:

Post a Comment