Skip to content

Trampas de Dev #1: tu ICO se ve bien — hasta que inspeccionas los frames BMP

2026-06-03

Tags: Windows · Trampas de Dev


Esto no es una historia de terror sobre certificación en la Store. Es una trampa más silenciosa — una en la que caí pura y exclusivamente por curiosidad.

Durante años generé archivos .ico siempre de la misma manera cutre: agarraba un PNG de 256×256, lo soltaba en cualquier conversor online aleatorio y me quedaba con el resultado. En el Explorador siempre se veía bien, así que nunca le di más vueltas.

Hasta que un día, mientras desarrollaba una herramienta de extracción ICO y probaba los archivos ICO de otros productos, me encontré con algo desagradable.

Lo que encontré

Un archivo ICO es un contenedor. Puede almacenar varias imágenes en distintos tamaños (16×16, 32×32, 48×48, 64×64, 128×128, 256×256) para que Windows elija la adecuada según el contexto — la barra de tareas, la barra de título, Alt+Tab, el Explorador de archivos.

En mi archivo ICO, cada frame individual se veía bien a simple vista. Pero al inspeccionar con más detalle:

  • El frame de 256×256 (almacenado como PNG) — perfecto. Canal alfa correcto, bordes suaves, sin artefactos.
  • Todos los frames BMP más pequeños — la transparencia estaba completamente estropeada. El canal alfa simplemente no existía o contenía datos basura. Los píxeles semitransparentes se convertían en bloques sólidos con halos de color extraños.

Los pequeños parecían un mal croma key de los 90.

Por qué los conversores online la fastidian

La mayoría de los conversores gratuitos de PNG a ICO funcionan así:

  1. Toman tu PNG de 256×256 y lo reducen a cada tamaño requerido (16, 32, 48, etc.)
  2. Guardan el frame de 256×256 como PNG
  3. Guardan los frames pequeños como BMP de 32 bits

Sin embargo, el formato BMP dentro de los archivos ICO es especial. No usa el sofisticado BITMAPV5HEADER — usa el BITMAPINFOHEADER estándar de 40 bytes, con biBitCount establecido a 32. El 4.º byte de cada píxel es el canal alfa. Y aquí está el problema: después de los datos de píxeles de color (XOR mask), debe haber una máscara de transparencia monocromática de 1 bit (AND mask) por compatibilidad heredada. Además, biHeight en la cabecera debe establecerse al doble de la altura real de la imagen para tener en cuenta este AND mask.

Muchos conversores online fallan justo aquí:

  • Declaran color de 32 bits pero rellenan el byte alfa (el 4.º byte) de cada píxel con 0x00 (completamente transparente) o datos basura aleatorios
  • La AND mask que generan está completamente desincronizada con los datos del canal alfa

El resultado: un archivo que parece válido — las entradas del directorio son correctas, los tamaños están bien, el Explorador no se queja — pero cuando Windows intenta renderizar los frames pequeños, el GDI blending se vuelve loco. Aparecen halos misteriosos, píxeles transparentes que no son realmente transparentes y otros artefactos de renderizado.

Por qué no te darás cuenta hasta que sea demasiado tarde

El Explorador de Windows y la mayoría de las aplicaciones prefieren el frame PNG de 256×256 para la visualización. Como ese está intacto, el icono se ve impecable en todas las vistas normales — iconos grandes, diálogo de propiedades, incluso la vista previa de la barra de tareas.

Los frames BMP rotos solo salen a la luz cuando Windows necesita redimensionar a un tamaño más pequeño específico. Por ejemplo:

ContextoTamaño usadoFrame probable
Explorador de archivos (muy grande)256×256PNG ✓
Explorador de archivos (grande/mediano)48×48BMP ✗
Barra de título / icono pequeño16×16BMP ✗
Conmutador Alt+Tab32×32BMP ✗

Así que el icono de tu aplicación puede verse perfecto en el escritorio pero desarrollar un misterioso "halo" o una transparencia estropeada en la barra de título o el conmutador de tareas. La mayoría culpa al renderizado de Windows. No — es el ICO.

Cómo revisar tus archivos ICO

Existen muchas herramientas gratuitas que pueden listar todos los frames de un archivo ICO. Busca:

  • Formato del frame: El frame de 256px debería indicar PNG. Los frames pequeños deberían indicar BMP. Usar PNG para todos los frames es técnicamente válido según la especificación ICO, pero puede causar problemas de compatibilidad en versiones antiguas de Windows. Una combinación de PNG (256px) + BMP (tamaños más pequeños) es la opción más segura.
  • Profundidad de bits del BMP: Debería ser 32 BPP para soporte real del canal alfa (blending semitransparente). Si pone 24 BPP, se han perdido los datos alfa por píxel — el frame puede recurrir aún a la AND mask de 1 bit heredada del ICO para un recorte básico de fondo del tipo "todo o nada", pero todos los bordes suavizados, degradados semitransparentes y sombras se romperán, convirtiéndose en feos artefactos sólidos o bordes negros gruesos en sistemas modernos.
  • Inspección visual: Carga cada frame individualmente. Los frames pequeños deberían tener un alfa suave y correcto, no bordes dentados ni fondos sólidos.

Cómo solucionarlo

Opción 1: Usa un editor de iconos adecuado y prueba tu conversor

Toma tu PNG original y crea un ICO nuevo con un editor apropiado que maneje correctamente el canal alfa de BMP. Antes de confiar en cualquier conversor — sea online u offline — haz una prueba: genera un ICO a partir de un PNG con áreas conocidas de semitransparencia (sombras suaves, degradados, etc.) y luego inspecciona cada frame. Si algún frame BMP tiene el alfa roto, ese conversor no es seguro.

Opción 2: ICO solo PNG (cuando sea posible)

Algunas herramientas modernas aceptan archivos ICO que usan compresión PNG para todos los frames, no solo para 256×256. Esto evita por completo el problema del alfa en BMP. Sin embargo, esto no es compatible universalmente con todas las versiones de Windows o aplicaciones — pruébalo antes de confiar en ello.

Conclusiones clave

  • Que un ICO se vea bien en el Explorador no significa que esté bien
  • El frame PNG de 256×256 suele ser correcto; todos los frames BMP más pequeños podrían estar rotos
  • El alfa roto de BMP es invisible en la mayoría de las vistas — solo aparece en barras de título, Alt+Tab y otros contextos de iconos pequeños
  • Prueba tu conversor online con un PNG semitransparente conocido antes de confiar en él
  • Usa un editor de iconos adecuado para todo lo que distribuyas — vale la pena los 5 minutos

Parte de la serie Trampas de Dev.