Utilisation de structures dans WCS 1.0
La plupart des structures utilisées par WCS 1.0 sont très simples et nécessitent peu d’explications. Ils sont documentés dans la section de référence wcs 1.0 intitulée Structures.
Les exceptions sont la structure COLORMATCHSETUPW utilisée par la fonction SetupColorMatchingW et les structures Windows suivantes définies dans Wingdi.h :
Les sujets suivants sont abordés plus longuement :
- Structures d’en-têtes Bitmap Windows
- Différences entre les en-têtes V4 et V5
- Bitmap.exe : utilitaire Command-Line pour la conversion d’en-têtes bitmap
Structures d’en-têtes Bitmap Windows
WCS 1.0 permet aux profils de couleur ICC d’être liés ou incorporés dans des bitmaps indépendantes des appareils (DIB). Cela permet de caractériser les couleurs DIB plus précisément que ce qui était possible avec WCS dans Windows 95. BITMAPV5HEADER , la nouvelle structure d’en-tête bitmap, est définie dans Wingdi.h dans la version de Windows 98. À des fins de développement, il est également inclus dans le fichier Icm.h avec cette référence du programmeur. La structure BITMAPV5HEADER est la suivante :
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;
Le membre bV5CSType peut avoir les valeurs PROFILE_EMBEDDED ou PROFILE_LINKED pour spécifier si un profil est incorporé ou lié à la DIB. Le membre bV5ProfileData est le décalage en octets entre le début de la structure BITMAPV5HEADER et le début des données de profil. Si le profil est incorporé, les données de profil sont le profil réel, et si elles sont liées, les données de profil sont le nom de fichier terminé par null du profil. Il ne peut pas s’agir d’une chaîne Unicode. Il doit être composé exclusivement de caractères du jeu de caractères Windows (page de codes 1252).
Lorsqu’une DIB est chargée en mémoire, les données de profil (le cas échéant) doivent suivre la table de couleurs, et bV5ProfileData doit donner le décalage des données de profil à partir du début de la structure BITMAPV5HEADER . La valeur de ce membre sera différente maintenant, car les bits bitmap ne suivent pas le tableau de couleurs en mémoire. Les applications doivent modifier le membre bV5ProfileData après avoir chargé la DIB en mémoire.
Pour les DIB compressés, les données de profil doivent suivre les bits bitmap similaires au format de fichier. Le membre bV5ProfileData doit toujours donner le décalage des données de profil à partir du début de la structure BITMAPV5HEADER .
Les applications doivent accéder aux données de profil uniquement lorsque bV5Size == sizeof ( BITMAPV5HEADER ) ANDbV5CSType est PROFILE_EMBEDDED ou PROFILE_LINKED.
Si un profil est lié, le chemin d’accès du profil peut être n’importe quel nom complet (y compris un chemin réseau) qui peut être ouvert à l’aide de la fonction Win32 CreateFile .
Différences entre les en-têtes V4 et V5
Lors de l’utilisation de la nouvelle structure bitmap, il est utile de reconnaître les différences dans la façon dont les structures BITMAPV4HEADER et BITMAPV5HEADER sont configurées :
En-tête V4 | Signification |
---|---|
bV4CSType | LCS_CALIBRATED_RGB. Cette valeur implique que les points de terminaison et les gammas sont donnés dans les champs appropriés. Les valeurs fausses provoquent des problèmes. |
bV4CSType | LCS_sRGB. Cette valeur implique que la bitmap se trouve dans l’espace de couleur sRGB (gamma et points de terminaison ignorés). |
bV4CSType | LCS_WINDOWS_COLOR_SPACE. Cette valeur implique que la bitmap se trouve dans l’espace de couleurs par défaut de Windows. |
En-tête V5 | Signification |
---|---|
bV5CSType | LCS_CALIBRATED_RGB. Cette valeur implique que les points de terminaison et les gammas sont donnés dans les champs appropriés. Les valeurs fausses provoquent des problèmes. |
bV5CSType | LCS_sRGB. Cette valeur implique que la bitmap se trouve dans l’espace de couleur sRGB (gamma et points de terminaison ignorés). |
bV5CSType | PROFILE_EMBEDDED. Cette valeur implique que bV5ProfileData pointe vers une mémoire tampon qui contient le profil à utiliser (les gamma et les points de terminaison sont ignorés). |
bV5CSType | PROFILE_LINKED. Cette valeur implique que bV5ProfileData pointe vers le nom de fichier du profil à utiliser (les gamma et les points de terminaison sont ignorés). |
bV5CSType | LCS_WINDOWS_COLOR_SPACE. Cette valeur implique que la bitmap se trouve dans l’espace de couleurs par défaut de Windows. |
Pour convertir des bitmaps plus anciennes vers et à partir de la nouvelle structure BITMAPV5HEADER , un fichier utilitaire de conversion de ligne de commande nommé Bitmap.exe est inclus dans la référence du programmeur WCS 1.0.
BitMap.exe : utilitaire Command-Line pour la conversion d’en-têtes bitmap
Bitmap.exe est un utilitaire de ligne de commande situé dans le dossier \Bin sous le dossier d’installation que vous avez spécifié. Il modifie les en-têtes des bitmaps Windows, ce qui vous permet de convertir les bitmaps existantes des structures d’en-tête BITMAPINFOHEADER et BITMAPV4HEADER vers la structure BITMAPV5HEADER plus récente, puis de revenir à nouveau. La syntaxe de ligne de commande est la suivante :
BITMAP [/d] [/1|4|5] [/s] [/f]
filename
Les commutateurs de ligne de commande ont les effets suivants.
Commutateur | Signification |
---|---|
/d | Les valeurs par défaut sont automatiquement entrées dans les en-têtes convertis. |
/1 | Convertir les bitmaps spécifiées en BITMAPINFOHEADER |
/4 | Convertir les bitmaps spécifiées en BITMAPV4HEADER |
/5 | Convertir les bitmaps spécifiées en BITMAPV5HEADER |
/f | Force la conversion, même si la bitmap a déjà l’en-tête approprié |
/s | Convertit les bitmaps dans le dossier spécifié et tous les sous-répertoires qu’il contient |