Использование структур в 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 в память.
Для упакованных DIBs данные профиля должны следовать за битами растрового изображения, подобно формату файла. Элемент bV5ProfileData должен по-прежнему указывать смещение данных профиля относительно начала структуры BITMAPV5HEADER.
Приложения должны получать доступ к данным профиля только в случае, если bV5Size == sizeof (BITMAPV5HEADER) и bV5CSType равно PROFILE_EMBEDDED или PROFILE_LINKED.
Если профиль привязан, путь профиля может быть любым полностью квалифицированным именем (включая сетевой путь), который можно открыть с помощью функции Win32 CreateFile.
Различия между заголовками версии 4 и V5
При работе с новой структурой растрового изображения полезно распознавать различия в настройке структур BITMAPV4HEADER и BITMAPV5HEADER:
Заголовок V4 | Значение |
---|---|
bV4CSType | LCS_КАЛИБРОВАННЫЙ_RGB. Это значение означает, что конечные точки и гамма задаются в соответствующих полях. Недостоверные значения вызывают проблемы. |
bV4CSType | LCS_sRGB. Это значение означает, что растровое изображение находится в цветовом пространстве sRGB (гамма-коррекция и конечные точки игнорируются). |
bV4CSType | LCS_WINDOWS_COLOR_SPACE. Это значение означает, что растровое изображение находится в цветовом пространстве Windows по умолчанию. |
Заголовок V5 | Значение |
---|---|
bV5CSType | LCS_CALIBRATED_RGB. Это значение означает, что конечные точки и гамма задаются в соответствующих полях. Поддельные значения вызывают проблемы. |
bV5CSType | LCS_sRGB. Это значение означает, что растровое изображение находится в цветовом пространстве sRGB (гаммы и конечные точки игнорируются). |
bV5CSType | ВЛОЖЕННЫЙ_ПРОФИЛЬ. Это значение подразумевает, что bV5ProfileData указывает на буфер памяти, содержащий используемый профиль (гамма и конечные точки игнорируются). |
bV5CSType | ПРОФИЛЬ_СВЯЗАН. Это значение означает, что bV5ProfileData указывает на имя файла профиля, который будет использоваться (гаммы и конечные точки игнорируются). |
bV5CSType | LCS_WINDOWS_COLOR_SPACE. Это значение означает, что растровое изображение находится в цветовом пространстве Windows по умолчанию. |
Чтобы преобразовать старые растровые изображения в новую структуру BITMAPV5HEADER, файл служебной программы преобразования командной строки с именем Bitmap.exe включен в справочник программиста WCS 1.0.
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 | Преобразует растровые изображения в указанной папке и всех вложенных каталогах. |