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


Использование структур в 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 в память.

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