Dev-Fallen #1: Deine ICO sieht gut aus — bis du die BMP-Frames prüfst
2026-06-03
Tags: Windows · ICO · Dev-Fallen
Das hier ist keine dieser Store-Zertifizierungs-Horrorgeschichten. Es ist eine eher unscheinbare Falle — in die ich ganz einfach aus purer Neugier getappt bin.
Jahrelang habe ich .ico-Dateien auf die immer gleiche bequeme Art erstellt: ein 256×256-PNG hernehmen, in irgendeinen beliebigen Online-Konverter werfen, das Ergebnis runterladen. Im Explorer sah es immer richtig aus, also habe ich mir nie Gedanken gemacht.
Bis ich eines Tages beim Entwickeln eines ICO-Unpacking-Tools die ICO-Dateien anderer Produkte getestet habe — und etwas Hässliches entdeckte.
Was ich gefunden habe
Eine ICO-Datei ist ein Container. Sie kann mehrere Bilder in verschiedenen Größen enthalten (16×16, 32×32, 48×48, 64×64, 128×128, 256×256), sodass Windows je nach Kontext das passende auswählen kann — Taskleiste, Titelleiste, Alt+Tab, Datei-Explorer.
In meiner ICO-Datei sah jeder einzelne Frame auf den ersten Blick einwandfrei aus. Aber bei genauerer Betrachtung:
- Der 256×256-Frame (als PNG gespeichert) — perfekt. Korrekter Alphakanal, weiche Kanten, keine Artefakte.
- Jeder kleinere BMP-Frame — die Transparenz war komplett hinüber. Der Alphakanal fehlte entweder ganz oder enthielt Müll. Halbtransparente Pixel wurden zu festen Blöcken mit seltsamen Farbsäumen.
Die kleineren sahen aus wie ein schlechter Chroma-Key aus den 90ern.
Warum Online-Konverter das vermasseln
Die meisten kostenlosen PNG-zu-ICO-Konverter arbeiten nach diesem Schema:
- Das 256×256-PNG nehmen und auf jede benötigte Größe herunterskalieren (16, 32, 48, usw.)
- Den 256×256-Frame als PNG speichern
- Die kleineren Frames als 32-Bit-BMP speichern
Das BMP-Format in ICO-Dateien ist jedoch besonders. Es verwendet nicht den ausgefeilten BITMAPV5HEADER, sondern den standardmäßigen 40-Byte-BITMAPINFOHEADER mit biBitCount auf 32. Das 4. Byte jedes Pixels ist der Alphakanal. Und hier kommt der Haken: Nach den Farb-Pixeldaten (XOR mask) muss eine 1-Bit-monochrome Transparenzmaske (AND mask) für die Abwärtskompatibilität vorhanden sein. Zudem muss biHeight im Header auf das Doppelte der tatsächlichen Bildhöhe gesetzt werden, um diese AND mask zu berücksichtigen.
Viele Online-Konverter scheitern genau hier:
- Sie deklarieren 32-Bit-Farbe, füllen aber jedes Alpha-Byte (das 4. Byte) jedes Pixels mit
0x00(vollständig transparent) oder zufälligen Müll-Daten - Die generierte AND mask ist völlig außer Takt mit den Alpha-Kanal-Daten
Das Ergebnis: eine Datei, die gültig aussieht — die Verzeichniseinträge stimmen, die Größen passen, der Explorer meckert nicht — aber wenn Windows versucht, die kleineren Frames zu rendern, geraten die GDI blending durcheinander. Man bekommt mysteriöse Halos, transparente Pixel, die gar nicht transparent sind, und andere Rendering-Artefakte.
Warum dir das erst auffällt, wenn es zu spät ist
Der Windows Explorer und die meisten Anwendungen bevorzugen den 256×256-PNG-Frame zur Anzeige. Da dieser unangetastet ist, sieht das Symbol in jeder normalen Ansicht einwandfrei aus — große Symbole, Eigenschaften-Dialog, selbst die Taskleisten-Vorschau.
Die kaputten BMP-Frames kommen nur dann zum Vorschein, wenn Windows auf eine bestimmte kleinere Größe herunterskalieren muss. Zum Beispiel:
| Kontext | Verwendete Größe | Wahrscheinlicher Frame |
|---|---|---|
| Datei-Explorer (extra groß) | 256×256 | PNG ✓ |
| Datei-Explorer (groß/mittel) | 48×48 | BMP ✗ |
| Titelleiste / kleines Symbol | 16×16 | BMP ✗ |
| Alt+Tab-Umschalter | 32×32 | BMP ✗ |
Das Icon deiner App sieht also auf dem Desktop perfekt aus, entwickelt aber in der Titelleiste oder im Aufgabenwechsel einen mysteriösen "Halo" oder eine vermurkste Transparenz. Die meisten geben dann Windows die Schuld. Dabei ist es das ICO.
So überprüfst du deine ICO-Dateien
Zieh deine .ico-Datei in ICO Unpacker — das Tool analysiert alles im Browser, kein Server-Upload nötig. Achte auf:
- Frame-Format: Der 256px-Frame sollte
PNGanzeigen. Kleinere Frames solltenBMPheißen. PNG für alle Frames zu verwenden ist gemäß der ICO-Spezifikation technisch gültig, kann jedoch auf älteren Windows-Versionen Kompatibilitätsprobleme verursachen. Eine Kombination aus PNG (256px) + BMP (kleinere Größen) ist die sicherste Wahl. - BMP-Bittiefe: Sollte
32 BPP(32 Bit pro Pixel) betragen für echte Alphakanal-Unterstützung (halbtransparentes Blending). Bei24 BPPsind die pro-Pixel-Alpha-Daten verloren — der Frame kann zwar noch auf die ICO-Legacy-1-Bit-AND mask für einfaches "alles-oder-nichts"-Hintergrund-Clipping zurückgreifen, aber alle kantengeglätteten Ränder, halbtransparenten Verläufe und Schatten brechen und werden zu hässlichen festen Artefakten oder dicken schwarzen Rändern auf modernen Systemen. - Sichtprüfung: Lade jeden Frame einzeln. Die kleineren Frames sollten sauberes, weiches Alpha aufweisen, keine ausgefransten Ränder oder einfarbige Hintergründe.
ICO Unpacker gibt es auch als kostenlose Windows-Desktop-App — gleiche Funktionalität, kein Browser nötig, komplett offline.
So behebst du das Problem
Option 1: Einen richtigen Icon-Editor verwenden und den Konverter testen
Nimm dein Quell-PNG und erzeuge mit einem ordentlichen Editor, der den BMP-Alphakanal korrekt verarbeitet, ein neues ICO. Bevor du einem Konverter vertraust — ob online oder offline — führe einen Test durch: Erstelle ein ICO aus einem PNG mit bekannten halbtransparenten Bereichen (weiche Schatten, Verläufe usw.) und prüfe dann jeden Frame. Wenn irgendein BMP-Frame kaputtes Alpha hat, ist dieser Konverter nicht sicher zu verwenden.
Option 2: PNG-Only-ICO (wenn möglich)
Einige moderne Werkzeuge akzeptieren ICO-Dateien, die PNG-Kompression für alle Frames verwenden, nicht nur für 256×256. Das umgeht das BMP-Alpha-Problem komplett. Allerdings wird dies nicht von allen Windows-Versionen und Anwendungen unterstützt — teste es gründlich, bevor du dich darauf verlässt.
Wichtigste Erkenntnisse
- Nur weil ein ICO im Explorer gut aussieht, heißt das noch lange nicht, dass es in Ordnung ist
- Der 256×256-PNG-Frame ist meist korrekt; jeder kleinere BMP-Frame kann kaputt sein
- Kaputter BMP-Alpha ist in den meisten Ansichten unsichtbar — er beißt dich nur in Titelleisten, Alt+Tab und anderen Kontexten mit kleinen Symbolen
- Teste deinen Online-Konverter mit einem bekannten halbtransparenten PNG, bevor du dich auf ihn verlässt
- Verwende einen richtigen Icon-Editor für alles, was du auslieferst — die 5 Minuten sind es wert
Teil der Dev-Fallen-Serie.