Freigeben über


Device-Independent Bitmaps

Eine geräteunabhängige Bitmap (DIB) enthält eine Farbtabelle. In einer Farbtabelle wird beschrieben, wie Pixelwerte RGB- Farbwerte entsprechen, die Farben beschreiben, die durch das Emittieren von Licht erzeugt werden. So kann ein DIB das richtige Farbschema auf jedem Gerät erzielen. Ein DIB enthält die folgenden Farb- und Dimensionsinformationen:

  • Das Farbformat des Geräts, auf dem das rechteckige Bild erstellt wurde.
  • Die Auflösung des Geräts, auf dem das rechteckige Bild erstellt wurde.
  • Die Palette für das Gerät, auf dem das Bild erstellt wurde.
  • Ein Array von Bits, die rot, grün, blau ( RGB- ) Triplets zu Pixeln im rechteckigen Bild zugeordnet.
  • Ein Datenkomprimierungsbezeichner, der das Datenkomprimierungsschema (falls vorhanden) angibt, mit dem die Größe des Arrays von Bits reduziert wird.

Die Farb- und Bemaßungsinformationen werden in einer BITMAPINFO- Struktur gespeichert, die aus einer BITMAPINFOHEADER- Struktur besteht, gefolgt von zwei oder mehr RGBQUAD- Strukturen. Die BITMAPINFOHEADER- Struktur gibt die Abmessungen des Pixelrechtecks an, beschreibt die Farbtechnologie des Geräts und identifiziert die Komprimierungsschemas, mit denen die Größe der Bitmap reduziert wird. Die RGBQUAD- Strukturen identifizieren die Farben, die im Pixelrechteck angezeigt werden.

Es gibt zwei Arten von DIBs:

  • Ein bottom-up DIB, in dem sich der Ursprung in der unteren linken Ecke befindet.
  • Ein OBEN-unten-DIB, in dem sich der Ursprung in der oberen linken Ecke befindet.

Wenn die Höhe eines DIB, wie durch das Height Member der Bitmapinformationskopfstruktur angegeben, ein positiver Wert ist, handelt es sich um eine bottom-up DIB; wenn die Höhe ein negativer Wert ist, handelt es sich um einen TOP-down-DIB.If the height is a negative value, it is a top-down DIB. Top-down-DIBs können nicht komprimiert werden.

Das Farbformat wird in Bezug auf die Anzahl der Farbebenen und Farbbits angegeben. Die Anzahl der Farbebenen ist immer 1; Die Anzahl der Farbbits ist 1 für monochrome Bitmaps, 4 für VGA-Bitmaps und 8, 16, 24 oder 32 für Bitmaps auf anderen Farbgeräten. Eine Anwendung ruft die Anzahl der Farbbits ab, die ein bestimmter Bildschirm (oder Drucker) verwendet, indem die GetDeviceCaps--Funktion aufgerufen wird, wobei BITSPIXEL als zweites Argument angegeben wird.

Die Auflösung eines Anzeigegeräts wird in Pixel pro Meter angegeben. Eine Anwendung kann die horizontale Auflösung für eine Videoanzeige oder einen Drucker abrufen, indem Sie diesen dreistufigen Prozess ausführen.

  1. Rufen Sie die GetDeviceCaps-Funktion auf, und geben Sie HORZRES als zweites Argument an.
  2. Rufen Sie GetDeviceCaps ein zweites Mal auf, und geben Sie HORZSIZE als zweites Argument an.
  3. Dividieren Sie den ersten Rückgabewert durch den zweiten Rückgabewert.

Die Anwendung kann die vertikale Auflösung mithilfe desselben dreistufigen Prozesses mit verschiedenen Parametern abrufen: VERTRES anstelle von HORZRES und VERTSIZE anstelle von HORZSIZE.

Die Palette wird durch ein Array von RGBQUAD- Strukturen dargestellt, die die Rot-, Grün- und Blauintensitätskomponenten für jede Farbe in der Farbpalette eines Anzeigegeräts angeben. Jeder Farbindex im Palettenarray ist einem bestimmten Pixel im rechteckigen Bereich zugeordnet, der der Bitmap zugeordnet ist. Die Größe dieses Arrays in Bits entspricht der Breite des Rechtecks in Pixeln, multipliziert mit der Höhe des Rechtecks in Pixeln, in Pixeln, multipliziert mit der Anzahl der Farbbits für das Gerät. Eine Anwendung kann die Größe der Gerätepalette abrufen, indem sie die GetDeviceCaps--Funktion aufrufen und NUMCOLORS als zweites Argument angeben.

Windows unterstützt die Komprimierung des Palettenarrays für 8-bpp- und 4-bpp-Bottom-up-DIBs. Diese Arrays können mithilfe des RLE-Schemas (Run-Length Encoding) komprimiert werden. Das RLE-Schema verwendet 2-Byte-Werte, das erste Byte, das die Anzahl aufeinander folgender Pixel angibt, die einen Farbindex verwenden, und das zweite Byte, das den Index angibt. Weitere Informationen zur Bitmapkomprimierung finden Sie in der Beschreibung der BITMAPINFOHEADER-, BITMAPFILEHEADER-, BITMAPV4HEADER- und BITMAPV5HEADER Strukturen.

Eine Anwendung kann ein DIB aus einer DDB erstellen, indem die erforderlichen Strukturen initialisiert und die GetDIBits--Funktion aufgerufen wird. Um festzustellen, ob ein Gerät diese Funktion unterstützt, rufen Sie die GetDeviceCaps--Funktion auf, und geben Sie RC_DI_BITMAP als RASTERCAPS-Flag an.

Eine Anwendung, die eine Bitmap kopieren muss, kann TransparentBlt- verwenden, um alle Pixel in einer Quellbitmap in eine Zielbitmap zu kopieren, mit Ausnahme der Pixel, die der transparenten Farbe entsprechen.

Eine Anwendung kann ein DIB verwenden, um Pixel auf dem Anzeigegerät festzulegen, indem die SetDIBitsToDevice- oder die StretchDIBits--Funktion aufgerufen wird. Um festzustellen, ob ein Gerät die SetDIBitsToDevice--Funktion unterstützt, rufen Sie die GetDeviceCaps--Funktion auf, wobei RC_DIBTODEV als RASTERCAPS-Flag angegeben wird. Geben Sie RC_STRETCHDIB als RASTERCAPS-Flag an, um zu ermitteln, ob das Gerät StretchDIBits-unterstützt.

Eine Anwendung, die einfach eine bereits vorhandene DIB anzeigen muss, kann die SetDIBitsToDevice--Funktion verwenden. Beispielsweise kann eine Tabellenkalkulationsanwendung vorhandene Diagramme öffnen und in einem Fenster anzeigen, indem sie die SetDIBitsToDevice--Funktion verwenden. Um eine Bitmap in einem Fenster wiederholt neu zu zeichnen, sollte die Anwendung jedoch die BitBlt--Funktion verwenden. Beispielsweise würde eine Multimediaanwendung, die animierte Grafiken mit Sound kombiniert, vom Aufrufen der BitBlt--Funktion profitieren, da sie schneller als SetDIBitsToDevice-ausgeführt wird.