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