Windows Alpha-Image-Loader Class
Eine C++ Klasse zum Laden von Bildern mit Transparenz unter Verwendung von Windows-Systemfunktionen.

Inhalt

  1. Einleitung
    1. Windows Imaging Component (WIC)
    2. Windows Common Controls
    3. Motivation
  2. Programmierschnittstelle
Test Image

Einleitung

Wenn bisher in Anwendungen transparente Bilder geladen werden mussten, wurde meist auf Icons zurückgegriffen. Diese boten seit je her eine Maske für Transparenz und seit Windows XP gab es auch einen Alphakanal mit dem 8-Bit Transparenz bei 24-Bit Farben dargestellt werden konnten.

Ein Nachteil von Icons jedoch ist die Beschränkung auf eine maximale Größe von 256 x 256 Pixel und deren Dateigröße. Solche ein Bild belegt alleine über 250 KB. Das Einbetten solcher Dateien in die Programmdateien würden diese enorm aufblähen. Zumindest ist es seit Windows Vista möglich, diese in komprimierter Form (PNG) zu speichern. Damit können ältere Betriebssysteme jedoch wiederum nichts anfangen.

Sinnvoller ist es direkt z.B. PNG-Dateien laden zu können und das wahlweise aus den Dateiresourcen heraus wie auch von einem beliebigen Speicherort auf der Festplatte. Hierzu wurde zwar mit dem Internet Explorer 5 (wenn ich mich nicht täusche) eine Schnittstelle eingeführt zum Laden von PNG-Dateien welche über die COM-Schnittstelle auch außerhalb verwendet werden konnte, jedoch setzte diese DirectX voraus und war sehr spartanisch und nicht sehr komfortabel zu verwenden. Ebenso wurde später die GDI+ Bibliothek eingeführt, welche zwar auch das Laden zum Beispiel von PNG-Dateien erlaubte, dann aber um auf älteren Systemen laufen zu können mit dem Installationspaket mitgeliefert werden musste. Da hätte man genauso gut nur eine auf das Laden von PNG-Bildern spezialisierte Bibliothek eines Drittanbieters einsetzen können.

Windows Imaging Component (WIC)

In Windows XP SP2 jedoch wurde die "Windows Imaging Component" API eingeführt welche es erlaubt alle gängigen Formate wie ICO, BMP, GIF, PNG, JPG und seit Windows 7 auch TIFF zu laden. Diese werden über die COM-Schnittstelle angesprochen.

Windows Common Controls

Die Windows Common Controls Bibliothek, welche für die wichtigsten Steuerelemente wie Baumansicht, Listenansicht, Toolbar usw. zuständig ist, unterstützt seit Version 6 die 8-Bit Transparenz. Hierzu müssen die visuellen Styles eingeschaltet sein.

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

Motivation

Mein Ziel war es eine möglichst einfache C++ Klasse für Windowsanwendungen zu erstellen, die es auf einfache Weise ermöglicht, gängige Bildformate über Windows-Systemfunktionen zu laden und diese in der Anwendung unter Verwendung der herkömmlichen GDI API einzusetzen.

Programmierschnittstelle

Diese Klasse stellt neben dem reinen Laden von Bildern weitere Komfortfunktionen bereit. Darunter eine Methode zum Zeichnen des Bildes auf einen Device Context sowie das Erstellen einer ImageList. Intern werden alle Bildformate in BGRA 32-Bit konvertiert und es wird daraus eine geräteunabhängige Windows Bitmap erzeugt. Der HBITMAP Handle kann dann von jeder GDI API-Funktion verwendet werden.