Verwenden von Strukturen in WCS 1.0

Die meisten von WCS 1.0 verwendeten Strukturen sind sehr einfach und erfordern nur wenig Erklärung. Sie sind im ABSCHNITT WCS 1.0-Referenz mit dem Titel Strukturendokumentiert.

Ausnahmen sind die COLORMATCHSETUPW-Struktur, die von der SetupColorMatchingW-Funktion verwendet wird, und die folgenden Windows in Wingdi.h definierten Strukturen:

Die folgenden Themen werden ausführlicher erläutert:

Windows Bitmapheaderstrukturen

WCS 1.0 ermöglicht das Verknüpfen oder Einbetten von COLOR-Farbprofilen in geräteunabhängige Bitmaps (DIBs). Dadurch können DIB-Farben genauer gekennzeichnet werden, als dies mit WCS in Windows 95 möglich war. BITMAPV5HEADER, die neue Bitmapheaderstruktur, wird in Wingdi.h in der Version von Windows 98 definiert. Zu Entwicklungszwecken ist sie auch in der Datei Icm.h mit dieser Programmierreferenz enthalten. Die BITMAPV5HEADER-Struktur sieht wie folgt aus:

typedef struct {
    DWORD        bV5Size;
    LONG         bV5Width;
    LONG         bV5Height;
    WORD         bV5Planes;
    WORD         bV5BitCount;
    DWORD        bV5Compression;
    DWORD        bV5SizeImage;
    LONG         bV5XPelsPerMeter;
    LONG         bV5YPelsPerMeter;
    DWORD        bV5ClrUsed;
    DWORD        bV5ClrImportant;
    DWORD        bV5RedMask;
    DWORD        bV5GreenMask;
    DWORD        bV5BlueMask;
    DWORD        bV5AlphaMask;
    DWORD        bV5CSType;
    CIEXYZTRIPLE bV5Endpoints;
    DWORD        bV5GammaRed;
    DWORD        bV5GammaGreen;
    DWORD        bV5GammaBlue;
    DWORD        bV5Intent;         // Rendering intent for bitmap 
    DWORD        bV5ProfileData;    // Offset to profile data 
    DWORD        bV5ProfileSize;    // Size of embedded profile data 
    DWORD        bV5Reserved;       // Should be zero 
} BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;

Der Member bV5CSType kann die Werte PROFILE _ EMBEDDED oder PROFILE LINKED _ aufweisen, um anzugeben, ob ein Profil eingebettet oder mit dem DIB verknüpft ist. Der Member bV5ProfileData ist der Offset in Bytes vom Anfang der BITMAPV5HEADER-Struktur bis zum Anfang der Profildaten. Wenn das Profil eingebettet ist, sind Profildaten das tatsächliche Profil, und wenn es verknüpft ist, sind die Profildaten der auf NULL endende Dateiname des Profils. Dies kann keine Unicode-Zeichenfolge sein. Er muss ausschließlich aus Zeichen aus dem Windows Zeichensatzes bestehen (Codepage 1252).

Wenn ein DIB in den Arbeitsspeicher geladen wird, sollten die Profildaten (sofern vorhanden) der Farbtabelle folgen, und bV5ProfileData sollte den Offset der Profildaten vom Anfang der BITMAPV5HEADER-Struktur angeben. Der Wert dieses Members ist jetzt anders, da die Bitmapbits nicht der Farbtabelle im Arbeitsspeicher folgen. Anwendungen sollten das bV5ProfileData-Element nach dem Laden des DIB in den Arbeitsspeicher ändern.

Bei gepackten DIBs sollten die Profildaten den Bitmapbits ähnlich dem Dateiformat entsprechen. Der bV5ProfileData-Member sollte weiterhin den Offset der Profildaten vom Anfang der BITMAPV5HEADER-Struktur angeben.

Anwendungen sollten nur dann auf die Profildaten zugreifen, wenn bV5Size == sizeof ( BITMAPV5HEADER ) ANDbV5CSType PROFILE _ EMBEDDED oder PROFILE LINKED _ ist.

Wenn ein Profil verknüpft ist, kann der Pfad des Profils ein beliebiger vollqualifizierte Name (einschließlich eines Netzwerkpfads) sein, der mit der Win32 CreateFile-Funktion geöffnet werden kann.

Unterschiede zwischen V4- und V5-Headern

Bei der Arbeit mit der neuen Bitmapstruktur ist es hilfreich, Unterschiede in der Einrichtung von BITMAPV4HEADER- und BITMAPV5HEADER-Strukturen zu erkennen:

V4-Header Bedeutung
bV4CSType _LCS-KALIBRIERTES _ RGB. Dieser Wert impliziert, dass Endpunkte und Gammawerte in den entsprechenden Feldern angegeben werden. Falsche Werte verursachen Probleme.
bV4CSType LCS _ sRGB. Dieser Wert impliziert, dass sich die Bitmap im sRGB-Farbraum befindet (Gammas und Endpunkte werden ignoriert).
bV4CSType LCS _ _ WINDOWS-FARBRAUM. _ Dieser Wert impliziert, dass sich die Bitmap in Windows Standardfarbraum befindet.
V5-Header Bedeutung
bV5CSType _LCS-KALIBRIERTES _ RGB. Dieser Wert impliziert, dass Endpunkte und Gammawerte in den entsprechenden Feldern angegeben werden. Falsche Werte verursachen Probleme.
bV5CSType LCS _ sRGB. Dieser Wert impliziert, dass sich die Bitmap im sRGB-Farbraum befindet (Gammas und Endpunkte werden ignoriert).
bV5CSType PROFIL _ EINGEBETTET. Dieser Wert impliziert, dass bV5ProfileData auf einen Speicherpuffer verweist, der das zu verwendende Profil enthält (Gammas und Endpunkte werden ignoriert).
bV5CSType _PROFIL VERKNÜPFT. Dieser Wert impliziert, dass bV5ProfileData auf den Dateinamen des zu verwendenden Profils verweist (Gammas und Endpunkte werden ignoriert).
bV5CSType LCS _ _ WINDOWS-FARBRAUM. _ Dieser Wert impliziert, dass sich die Bitmap in Windows Standardfarbraum befindet.

Um ältere Bitmaps in und aus der neuen BITMAPV5HEADER-Struktur zu konvertieren, ist eine Befehlszeilen-Konvertierungshilfsprogrammdatei mit dem Namen Bitmap.exe in der WCS 1.0-Programmierreferenz enthalten.

BitMap.exe: ein Command-Line-Hilfsprogramm zum Konvertieren von Bitmapheadern

Bitmap.exe ist ein Befehlszeilenprogramm, das sich im \ Ordner Bin unter dem von Ihnen angegebenen Installationsordner befindet. Sie ändert die Header von Windows Bitmaps, sodass Sie vorhandene Bitmaps von BITMAPINFOHEADER- und BITMAPV4HEADER-Headerstrukturen in die neuere BITMAPV5HEADER-Struktur und wieder zurück konvertieren können. Die Befehlszeilensyntax lautet wie folgt:

BITMAP [/d] [/1|4|5] [/s] [/f] 
filename

Die Befehlszeilenschalter haben die folgenden Auswirkungen.

Schalter Bedeutung
/d Standardwerte werden automatisch in die konvertierten Header eingegeben.
/1 Konvertieren der angegebenen Bitmaps in BITMAPINFOHEADER
/4 Konvertieren der angegebenen Bitmaps in BITMAPV4HEADER
/5 Konvertieren der angegebenen Bitmaps in BITMAPV5HEADER
/f Erzwingt die Konvertierung, auch wenn die Bitmap bereits über den richtigen Header verfügt.
/s Konvertiert Bitmaps im angegebenen Ordner und in alle darunter befindlichen Unterverzeichnisse.