使用 WCS 1.0 中的结构

WCS 1.0 使用的大多数结构非常简单,几乎不需要解释。 它们记录在 WCS 1.0 参考部分中,标题为 结构

SetupColorMatchingW 函数使用的 COLORMATCHSETUPW 结构以及 Wingdi.h 中定义的以下 Windows 结构例外:

将更详细地讨论以下主题:

Windows 位图标头结构

WCS 1.0 允许将 ICC 颜色配置文件链接或嵌入到与设备无关的位图中, (DIB) 。 这样,与在 Windows 95 中使用 WCS 相比,可以更准确地描述 DIB 颜色的特征。 BITMAPV5HEADER (新位图标头结构)在 Windows 98 版本中的 Wingdi.h 中定义。 出于开发目的,它还包含在文件 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 结尾的文件名。 这不能是 Unicode 字符串。 它必须完全由代码页 1252) (Windows 字符集中的字符组成。

将 DIB 加载到内存中时,配置文件数据 ((如果存在) )应遵循颜色表, bV5ProfileData 应提供从 BITMAPV5HEADER 结构开头开始的配置文件数据的偏移量。 此成员的值现在将不同,因为位图位不遵循内存中的颜色表。 将 DIB 加载到内存后,应用程序应修改 bV5ProfileData 成员。

对于打包的 DIB,配置文件数据应遵循类似于文件格式的位图位。 bV5ProfileData 成员仍应提供与 BITMAPV5HEADER 结构开头的配置文件数据的偏移量。

仅当 bV5Size == size 为 ( BITMAPV5HEADER ) ANDbV5CSType PROFILE_EMBEDDED或PROFILE_LINKED时,应用程序才应访问配置文件数据。

如果已链接配置文件,则配置文件的路径可以是任何完全限定的名称 (包括可以使用 Win32 CreateFile 函数打开的网络路径) 。

V4 和 V5 标头之间的差异

在使用新的位图结构时,识别 BITMAPV4HEADERBITMAPV5HEADER 结构设置方式的差异非常有用:

V4 标头 含义
bV4CSType LCS_CALIBRATED_RGB。 此值表示终结点和伽玛值在相应的字段中给定。 虚假值会导致问题。
bV4CSType LCS_sRGB。 此值表示位图位于 sRGB 颜色空间中, (伽玛和终结点) 忽略。
bV4CSType LCS_WINDOWS_COLOR_SPACE。 此值表示位图位于 Windows 默认颜色空间中。

 

V5 标头 含义
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 位图的标头,使你可以将现有位图从 BITMAPINFOHEADERBITMAPV4HEADER 标头结构转换为较新的 BITMAPV5HEADER 结构,然后再次返回。 命令行语法如下所示:

BITMAP [/d] [/1|4|5] [/s] [/f] 
filename

命令行开关具有以下效果。

开关 含义
/d 默认值会自动在转换后的标头中输入。
/1 将指定的位图转换为 BITMAPINFOHEADER
/4 将指定的位图转换为 BITMAPV4HEADER
/5 将指定的位图转换为 BITMAPV5HEADER
/f 强制转换,即使位图已具有正确的标头
/s 转换指定文件夹中的位图及其下的所有子目录