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
- Unterschiede zwischen V4- und V5-Headern
- Bitmap.exe: ein Command-Line Hilfsprogramm zum Konvertieren von Bitmapheadern
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 |