Использование структур в WCS 1.0
Большинство структур, используемых WCS 1.0, очень просты и требуют небольшого объяснения. Они описаны в разделе Справочника по WCS 1.0, который называется Структуры.
Исключениями являются структура COLORMATCHSETUPW , используемая функцией SetupColorMatchingW , и следующие структуры Windows, определенные в Wingdi.h:
Более подробно рассматриваются следующие темы:
- Структуры заголовков растрового рисунка Windows
- Различия между заголовками V4 и V5
- Bitmap.exe: служебная программа Command-Line для преобразования заголовков растровых рисунков
Структуры заголовков растрового рисунка Windows
WCS 1.0 позволяет связывать или внедрять цветовые профили ICC в независимые от устройства растровые изображения (DIB). Это позволяет более точно характеризовать цвета DIB, чем это было возможно при использовании WCS в Windows 95. BITMAPV5HEADER , новая структура заголовка растрового изображения, определена в Wingdi.h в выпуске Windows 98. В целях разработки он также включен в файл Icm.h с ссылкой на этот программист. Структура BITMAPV5HEADER выглядит следующим образом:
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;
Член bV5CSType может иметь значения, PROFILE_EMBEDDED или PROFILE_LINKED, чтобы указать, является ли профиль внедренным или связанным с DIB. Элемент bV5ProfileData — это смещение в байтах от начала структуры BITMAPV5HEADER до начала данных профиля. Если профиль внедрен, данные профиля являются фактическим профилем, а если они связаны, данные профиля — это имя файла профиля, завершаемое null. Это не может быть строка Юникода. Он должен состоять исключительно из символов из кодировки Windows (кодовая страница 1252).
При загрузке DIB в память данные профиля (при наличии) должны соответствовать таблице цветов, а bV5ProfileData — смещению данных профиля от начала структуры BITMAPV5HEADER . Теперь значение этого элемента будет другим, так как битовые рисунки не соответствуют таблице цветов в памяти. Приложения должны изменить член bV5ProfileData после загрузки DIB в память.
Для упакованных DIB данные профиля должны соответствовать битам растрового изображения, аналогично формату файла. Член bV5ProfileData по-прежнему должен давать смещение данных профиля от начала структуры BITMAPV5HEADER .
Приложения должны обращаться к данным профиля только в том случае, если PROFILE_EMBEDDED или PROFILE_LINKED PROFILE_EMBEDDED или PROFILE_LINKED bV5Size == sizeof ( BITMAPV5HEADER ) ANDbV5CSType .
Если профиль связан, путь к профилю может быть любым полным именем (включая сетевой путь), который можно открыть с помощью функции Win32 CreateFile .
Различия между заголовками V4 и V5
При работе с новой структурой растрового изображения полезно распознавать различия в настройке структур BITMAPV4HEADER и BITMAPV5HEADER :
Заголовок версии 4 | Значение |
---|---|
bV4CSType | LCS_CALIBRATED_RGB. Это значение подразумевает, что конечные точки и гамма задаются в соответствующих полях. Фиктивные значения вызывают проблемы. |
bV4CSType | LCS_sRGB. Это значение означает, что растровое изображение находится в цветовом пространстве sRGB (гамма и конечные точки игнорируются). |
bV4CSType | LCS_WINDOWS_COLOR_SPACE. Это значение означает, что растровое изображение находится в цветовом пространстве Windows по умолчанию. |
Заголовок версии 5 | Значение |
---|---|
bV5CSType | LCS_CALIBRATED_RGB. Это значение подразумевает, что конечные точки и гамма задаются в соответствующих полях. Фиктивные значения вызывают проблемы. |
bV5CSType | LCS_sRGB. Это значение означает, что растровое изображение находится в цветовом пространстве sRGB (гамма и конечные точки игнорируются). |
bV5CSType | PROFILE_EMBEDDED. Это значение подразумевает, что bV5ProfileData указывает на буфер памяти, содержащий используемый профиль (гамма-параметры и конечные точки игнорируются). |
bV5CSType | PROFILE_LINKED. Это значение подразумевает, что bV5ProfileData указывает на имя файла используемого профиля (гамма и конечные точки игнорируются). |
bV5CSType | LCS_WINDOWS_COLOR_SPACE. Это значение означает, что растровое изображение находится в цветовом пространстве Windows по умолчанию. |
Чтобы преобразовать старые растровые изображения в новую структуру BITMAPV5HEADER и из нее, в справочнике программистов WCS 1.0 включен файл служебной программы преобразования командной строки с именем Bitmap.exe.
BitMap.exe: служебная программа Command-Line для преобразования заголовков растровых рисунков
Bitmap.exe — это служебная программа командной строки, расположенная в папке \Bin в указанной папке установки. Он изменяет заголовки растровых изображений Windows, позволяя преобразовать существующие растровые изображения из структур заголовков BITMAPINFOHEADER и BITMAPV4HEADER в более новую структуру BITMAPV5HEADER и обратно. Синтаксис командной строки выглядит следующим образом:
BITMAP [/d] [/1|4|5] [/s] [/f]
filename
Параметры командной строки имеют следующие эффекты.
Коммутатор | Значение |
---|---|
/d | Значения по умолчанию автоматически вводятся в преобразованные заголовки. |
/1 | Преобразование указанных растровых изображений в BITMAPINFOHEADER |
/4 | Преобразование указанных растровых изображений в BITMAPV4HEADER |
/5 | Преобразование указанных растровых изображений в BITMAPV5HEADER |
/f | Принудительное преобразование, даже если на растровом рисунке уже есть правильный заголовок |
/s | Преобразует растровые изображения в указанной папке и все подкаталоги в ней. |