Uso de estructuras en WCS 1.0
La mayoría de las estructuras usadas por WCS 1.0 son muy sencillas y requieren poca explicación. Se documentan en la sección Referencia de WCS 1.0 titulada Estructuras.
Las excepciones son la estructura COLORMATCHSETUPW usada por la función SetupColorMatchingW y las siguientes estructuras de Windows definidas en Wingdi.h:
Los temas siguientes se tratan con mayor longitud:
- Estructuras de encabezado de mapa de bits de Windows
- Diferencias entre los encabezados V4 y V5
- Bitmap.exe: una utilidad Command-Line para convertir encabezados de mapa de bits
Estructuras de encabezado de mapa de bits de Windows
WCS 1.0 permite vincular o insertar perfiles de color ICC en mapas de bits independientes del dispositivo (DIB). Esto permite caracterizar los colores DIB con mayor precisión de lo que era posible mediante WCS en Windows 95. BITMAPV5HEADER , la nueva estructura de encabezado de mapa de bits, se define en Wingdi.h en la versión de Windows 98. Para fines de desarrollo, también se incluye en el archivo Icm.h con la Referencia del programador. La estructura BITMAPV5HEADER es la siguiente:
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;
El miembro bV5CSType puede tener los valores PROFILE_EMBEDDED o PROFILE_LINKED para especificar si un perfil está incrustado o vinculado con la DIB. El miembro bV5ProfileData es el desplazamiento en bytes desde el principio de la estructura BITMAPV5HEADER hasta el inicio de los datos del perfil. Si el perfil está incrustado, los datos de perfil son el perfil real y, si está vinculado, los datos del perfil son el nombre de archivo terminado en null del perfil. No puede ser una cadena Unicode. Debe estar compuesto exclusivamente de caracteres del juego de caracteres de Windows (página de códigos 1252).
Cuando se carga una DIB en memoria, los datos del perfil (si están presentes) deben seguir la tabla de colores y bV5ProfileData debe proporcionar el desplazamiento de los datos de perfil desde el principio de la estructura BITMAPV5HEADER . El valor de este miembro será diferente ahora, ya que los bits de mapa de bits no siguen la tabla de colores en memoria. Las aplicaciones deben modificar el miembro bV5ProfileData después de cargar la DIB en memoria.
En el caso de las DIB empaquetadas, los datos de perfil deben seguir los bits de mapa de bits similares al formato de archivo. El miembro bV5ProfileData todavía debe proporcionar el desplazamiento de los datos de perfil desde el principio de la estructura BITMAPV5HEADER .
Las aplicaciones solo deben tener acceso a los datos de perfil cuando bV5Size == sizeof ( BITMAPV5HEADER ) ANDbV5CSType es PROFILE_EMBEDDED o PROFILE_LINKED.
Si un perfil está vinculado, la ruta de acceso del perfil puede ser cualquier nombre completo (incluida una ruta de acceso de red) que se puede abrir mediante la función CreateFile de Win32.
Diferencias entre los encabezados V4 y V5
Al trabajar con la nueva estructura de mapa de bits, resulta útil reconocer las diferencias en cómo se configuran las estructuras BITMAPV4HEADER y BITMAPV5HEADER :
Encabezado V4 | Significado |
---|---|
bV4CSType | LCS_CALIBRATED_RGB. Este valor implica que los puntos finales y gammas se proporcionan en los campos adecuados. Los valores falsos provocan problemas. |
bV4CSType | LCS_sRGB. Este valor implica que el mapa de bits está en espacio de color sRGB (gammas y puntos de conexión omitido). |
bV4CSType | LCS_WINDOWS_COLOR_SPACE. Este valor implica que el mapa de bits está en el espacio de colores predeterminado de Windows. |
Encabezado V5 | Significado |
---|---|
bV5CSType | LCS_CALIBRATED_RGB. Este valor implica que los puntos finales y gammas se proporcionan en los campos adecuados. Los valores falsos provocan problemas. |
bV5CSType | LCS_sRGB. Este valor implica que el mapa de bits está en espacio de color sRGB (gammas y puntos de conexión omitido). |
bV5CSType | PROFILE_EMBEDDED. Este valor implica que bV5ProfileData apunta a un búfer de memoria que contiene el perfil que se va a usar (se omiten gammas y puntos de conexión). |
bV5CSType | PROFILE_LINKED. Este valor implica que bV5ProfileData apunta al nombre de archivo del perfil que se va a usar (se omiten gammas y puntos de conexión). |
bV5CSType | LCS_WINDOWS_COLOR_SPACE. Este valor implica que el mapa de bits está en el espacio de colores predeterminado de Windows. |
Para convertir mapas de bits antiguos en y desde la nueva estructura BITMAPV5HEADER , se incluye un archivo de utilidad de conversión de línea de comandos denominado Bitmap.exe en la Referencia del programador de WCS 1.0.
BitMap.exe: una utilidad de Command-Line para convertir encabezados de mapa de bits
Bitmap.exe es una utilidad de línea de comandos ubicada en la carpeta \Bin de la carpeta de instalación que especificó. Modifica los encabezados de los mapas de bits de Windows, lo que le permite convertir los mapas de bits existentes de BITMAPINFOHEADER y BITMAPV4HEADER estructuras de encabezado a la estructura BITMAPV5HEADER más reciente y de nuevo. La sintaxis de la línea de comandos es la siguiente:
BITMAP [/d] [/1|4|5] [/s] [/f]
filename
Los modificadores de línea de comandos tienen los siguientes efectos.
Conmutador | Significado |
---|---|
/d | Los valores predeterminados se escriben automáticamente en los encabezados convertidos. |
/1 | Convertir los mapas de bits especificados en BITMAPINFOHEADER |
/4 | Convertir los mapas de bits especificados en BITMAPV4HEADER |
/5 | Convertir los mapas de bits especificados en BITMAPV5HEADER |
/f | Fuerza la conversión, incluso si el mapa de bits ya tiene el encabezado derecho. |
/s | Convierte mapas de bits en la carpeta especificada y todos los subdirectorios en ella. |