Поделиться через


Использование структур в WCS 1.0

Большинство структур, используемых WCS 1.0, очень просты и требуют небольшого объяснения. Они описаны в разделе справочника WCS 1.0 с заголовком Структуры.

Исключениями являются структура COLORMATCHSETUPW, используемая функцией SetupColorMatchingW, и следующие структуры Windows, определенные в Wingdi.h:

Более подробно рассматриваются следующие темы:

Структуры заголовков растровых карт 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 Преобразует растровые изображения в указанной папке и всех вложенных каталогах.