Was ist eine DIB-Datei?

Eine DIB-Datei speichert eine geräteunabhängige Windows-Bitmap mit definierten Headern, optionalen Farbtabellen und Pixeldaten. Ihre Darstellung ist eng mit BMP verwandt und darauf ausgelegt, unabhängig von einem bestimmten Anzeigegerät zu sein.

So funktionieren DIB-Dateien

Ein DIB beschreibt Rasterpixel mit einem Bitmap-Informationsheader, optionalen Farbmasken oder einer Farbtabelle und Bildzeilen, die an vier Bytes ausgerichtet sind. Dieselbe Struktur tritt an drei Stellen auf: innerhalb einer BMP-Datei nach dem 14 Bytes großen Header vom Typ BITMAPFILEHEADER, als gepacktes DIB im Arbeitsspeicher und in der Windows-Zwischenablage als CF_DIB oder CF_DIBV5. Windows behandelt .dib als zweite Dateiendung für BMP, während manche Werkzeuge mit DIB die Form ohne Dateiheader meinen. Es gibt vier Headergenerationen (BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADER), die anhand des Größenwerts in ihren ersten vier Bytes unterschieden werden. Eine Farbtabelle ist bei 1, 4 und 8 Bit pro Pixel vorgeschrieben. Bitmaps mit BI_BITFIELDS platzieren drei Farbmasken direkt nach einer Struktur vom Typ BITMAPINFOHEADER. Ein Importer muss daher den deklarierten Aufbau auslesen, statt Pixel mit 24 Bit anzunehmen.

Wichtige Fakten

  1. DIB kann Daten mit oder ohne BMP-Dateiheader bezeichnen. Der BMP-Codec von Windows registriert sowohl .bmp als auch .dib für dasselbe Format image/bmp, das mit einem Header vom Typ BITMAPFILEHEADER beginnt (Bytes BM). Daten im Zwischenablageformat CF_DIB bestehen aus einer Struktur vom Typ BITMAPINFO, direkt gefolgt von den Pixelbits. ImageMagick definiert sein Format DIB als BMP-Datei ohne BMP-Header. Prüfen Sie auf die Signatur BM, bevor Sie einen Parser auswählen.
  2. Unkomprimierte Bildzeilen werden auf ein Vielfaches von vier Bytes aufgefüllt. Diese Füllbytes sind keine Pixeldaten: Eine Bitmap mit 10×10 und 24 Bit enthält zwei Füllbytes pro Zeile. Berechnen Sie den Zeilenabstand als ((width * bitsPerPixel + 31) & ~31) >> 3. RLE-komprimierte Bitmaps bilden die Ausnahme und sind nicht auf diese Weise ausgerichtet.
  3. Eine positive Höhe bedeutet eine Speicherung von unten nach oben: Die erste gespeicherte Zeile ist die unterste Bildzeile. Eine negative Höhe bedeutet eine Speicherung von oben nach unten. Letztere ist nur für unkomprimierte Daten verfügbar: RLE-komprimierte Bitmaps und Bitmaps mit BITMAPCOREHEADER können nicht von oben nach unten gespeichert werden.
  4. Gehen Sie nicht davon aus, dass ein DIB mit 32 Bit gültige Transparenz enthält. Der BMP-Codec von Microsoft ignoriert den zusätzlichen Kanal von Bitmaps mit 16 Bit und 32 Bit, weil viele ältere Dateien dort ungültige Daten enthalten. Ab Windows 8 liest er Alpha nur aus Dateien mit 32 Bit, die mit einem Header vom Typ BITMAPV5HEADER geschrieben wurden. Das ist die Verarbeitungsregel eines einzelnen Codecs, keine Formatgrenze: Auch die frühere Struktur BITMAPV4HEADER definiert eine Alphamaske. Prüfen Sie daher, wie Ihr eigener Decoder den vierten Kanal behandelt.

Wann DIB-Dateien relevant sind

Rechnen Sie in Windows-Grafik-APIs, bei Zwischenablageübertragungen und in älteren Bildworkflows mit DIB-Daten. Korrektes Parsen erfordert, Headervarianten, Zeilenfüllbytes, Farbtabellen und eine mögliche Speicherung der Pixelzeilen von unten nach oben zu berücksichtigen.

Quellen

Machen Sie aus Medienwissen eine funktionierende Pipeline

Verbinden Sie Uploads, Verarbeitung, KI, Storage und Auslieferung über eine deklarative API – um Encoding-Stack, Skalierung und ständig wechselnde Formate müssen Sie sich nicht selbst kümmern.

Transloadit kostenlos ausprobieren