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

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