Freigeben über


Verwenden von Strukturen in WCS 1.0

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

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

Die folgenden Themen werden ausführlicher behandelt:

Windows-Bitmapheaderstrukturen

MIT WCS 1.0 können ICC-Farbprofile verknüpft oder in geräteunabhängige Bitmaps (DIBs) eingebettet werden. Dadurch können DIB-Farben präziser charakterisiert 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 es auch in der Datei Icm.h mit dieser Programmer's Reference 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;

Das Element bV5CSType kann die Werte PROFILE_EMBEDDED oder PROFILE_LINKED haben, um anzugeben, ob ein Profil eingebettet oder mit dem DIB verknüpft ist. Das Element bV5ProfileData ist der Offset in Bytes vom Anfang der BITMAPV5HEADER-Struktur bis zum Anfang der Profildaten. Wenn das Profil eingebettet ist, sind Die Profildaten das tatsächliche Profil, und wenn sie verknüpft sind, sind die Profildaten der null-beendete Dateiname des Profils. Hierbei kann es sich nicht um eine Unicode-Zeichenfolge handeln. Er muss ausschließlich aus Zeichen aus dem Windows-Zeichensatz (Codepage 1252) bestehen.

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 geben. Der Wert dieses Elements ist jetzt anders, da die Bitmapbits nicht der Farbtabelle im Arbeitsspeicher folgen. Anwendungen sollten den bV5ProfileData-Member nach dem Laden des DIB in den Arbeitsspeicher ändern.

Bei gepackten DIBs sollten die Profildaten den Bitmapbits ähnlich dem Dateiformat folgen. Das bV5ProfileData-Element sollte weiterhin den Offset der Profildaten vom Anfang der BITMAPV5HEADER-Struktur geben.

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 vollqualifizierter Name (einschließlich eines Netzwerkpfads) sein, der mit der Win32 CreateFile-Funktion geöffnet werden kann.

Unterschiede zwischen V4- und V5-Headern

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

V4-Header Bedeutung
bV4CSType LCS_CALIBRATED_RGB. Dieser Wert impliziert, dass Endpunkte und Gammas 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_COLOR_SPACE. Dieser Wert impliziert, dass sich die Bitmap im Windows-Standardfarbraum befindet.

 

V5-Header Bedeutung
bV5CSType LCS_CALIBRATED_RGB. Dieser Wert impliziert, dass Endpunkte und Gammas 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 PROFILE_EMBEDDED. Dieser Wert impliziert, dass bV5ProfileData auf einen Speicherpuffer verweist, der das zu verwendende Profil enthält (Gammas und Endpunkte werden ignoriert).
bV5CSType PROFILE_LINKED. Dieser Wert impliziert, dass bV5ProfileData auf den Dateinamen des zu verwendenden Profils verweist (Gammas und Endpunkte werden ignoriert).
bV5CSType LCS_WINDOWS_COLOR_SPACE. Dieser Wert impliziert, dass sich die Bitmap im Windows-Standardfarbraum befindet.

 

Um ältere Bitmaps in und aus der neuen BITMAPV5HEADER-Struktur zu konvertieren, ist eine Befehlszeilenkonvertierungs-Hilfsprogrammdatei namens Bitmap.exe in der WCS 1.0-Programmiererreferenz 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. Es ä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 Befehlszeilenoptionen 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 allen Unterverzeichnissen darunter