使用 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 标头之间的差异
在使用新的位图结构时,识别 BITMAPV4HEADER 和 BITMAPV5HEADER 结构设置方式的差异非常有用:
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 位图的标头,使你可以将现有位图从 BITMAPINFOHEADER 和 BITMAPV4HEADER 标头结构转换为较新的 BITMAPV5HEADER 结构,然后再次返回。 命令行语法如下所示:
BITMAP [/d] [/1|4|5] [/s] [/f]
filename
命令行开关具有以下效果。
开关 | 含义 |
---|---|
/d | 默认值会自动在转换后的标头中输入。 |
/1 | 将指定的位图转换为 BITMAPINFOHEADER |
/4 | 将指定的位图转换为 BITMAPV4HEADER |
/5 | 将指定的位图转换为 BITMAPV5HEADER |
/f | 强制转换,即使位图已具有正确的标头 |
/s | 转换指定文件夹中的位图及其下的所有子目录 |