createMultiProfileTransform 函数 (icm.h)

接受配置文件数组或单个 设备链接配置文件 ,并创建应用程序可用于执行颜色映射的颜色转换。

语法

HTRANSFORM CreateMultiProfileTransform(
  PHPROFILE pahProfiles,
  DWORD     nProfiles,
  PDWORD    padwIntent,
  DWORD     nIntents,
  DWORD     dwFlags,
  DWORD     indexPreferredCMM
);

parameters

pahProfiles

指向要使用的配置文件的句柄数组的指针。 函数确定 HPROFIL 是否包含国际颜色联盟 (ICC) 或 Windows 颜色系统 (WCS) 配置文件信息并对其进行适当处理。 当 OpenColorProfileWWcsOpenColorProfileW 返回有效的 WCS 配置文件时,这些配置文件句柄包含 DMP、CAMP 和 GMMP 配置文件的组合。

nProfiles

指定数组中的配置文件数。 最大值为 10。

padwIntent

指向要使用的意向数组的指针。 每个意向都是以下值之一:

INTENT_PERCEPTUAL

INTENT_SATURATION

INTENT_RELATIVE_COLORIMETRIC

INTENT_ABSOLUTE_COLORIMETRIC

GMMP 是意向的通用化。 有两个可能的意向源:“destination”配置文件和 CreateMultiProfileTransform 的意向列表参数。 不使用术语“destination”,因为配置文件列表参数中除两个配置文件之外的所有配置文件都将用作第一个目标,然后用作源。

有关详细信息,请参阅 呈现意向

nIntents

指定意向数组中的元素数: 可以是 1,也可以是 与 nProfiles 相同的值。 对于包含任何 WCS 配置文件的配置文件数组,将忽略第一个呈现意向,并且仅将 nProfiles -1 元素用于这些配置文件数组。 nIntents 的最大数目为 10。

dwFlags

指定用于控制转换的创建的标志。 请参阅“备注”。

indexPreferredCMM

指定颜色配置文件的从 1 开始的索引,该索引指示 (CMM) 要使用的颜色管理模块。 应用程序开发人员可以通过将此参数设置为 INDEX_DONT_CARE 来允许 Windows 选择 CMM。 请参阅 使用颜色管理模块 (CMM) 第三方 CMM 仅适用于 ICC 工作流。 包含 WCS 配置文件的配置文件数组将忽略此标志。 当仅使用 ICC 配置文件和使用 WCS_ALWAYS 标志时,也会忽略它。

返回值

如果此函数成功,则返回值是颜色转换的句柄。

如果此函数失败,则返回值为 NULL。 有关扩展的错误信息,请调用 GetLastError

注解

如果使用设备链接配置文件,则 nProfiles 未设置为 1 时,函数将失败。

意向数组指定应如何组合配置文件。 第 n个意向用于组合数组中的第 n个配置文件。 如果只指定了一个意向,则它将用于第一个配置文件,所有其他配置文件使用 Match 意向进行组合。

dwFlags 中的值仅用作提示。 颜色管理模块必须确定使用它们的最佳方式。

Windows Vista:添加了三个可与 dwFlags 一起使用的新标志:

标志 描述
PRESERVEBLACK 如果设置了此位,转换引擎将插入相应的黑色生成 GMMP 作为转换序列中的最后一个 GMMP。 此标志仅适用于纯 WCS 转换。
SEQUENTIAL_TRANSFORM 如果设置了此位,则会对图像中的每个像素执行 WCS 处理管道中的每个步骤,并且不会生成优化的颜色转换。 此标志仅适用于纯 WCS 转换。限制:使用SEQUENTIAL_TRANSFORM标志集创建的转换只能在创建它的线程中使用,并且一次只能用于一个颜色转换调用。 COM 必须在创建顺序转换之前进行初始化,并且必须在转换对象的生存期内保持初始化状态。
WCS_ALWAYS 如果设置了此位,即使是所有 ICC 转换也将使用 WCS 代码路径。

注意

Windows Vista SDK 的 icm.h 标头中无意中省略了SEQUENTIAL_TRANSFORM。 如果要使用 SEQUENTIAL_TRANSFORM 标志,请在应用程序中定义它,如下所示:

#define SEQUENTIAL_TRANSFORM 0x80800000

有关详细信息,请参阅 CMM 转换创建标志。 上述所有标志都支持所有类型的转换,但FAST_TRANSLATE和USE_RELATIVE_COLORIMETRIC除外,它们仅在纯 ICC 到 ICC 转换中工作。

CreateMultiProfileTransform 函数在设备上下文外部使用。 从颜色配置文件转换为同一颜色配置文件时,颜色可能会发生变化。 这是由于精度错误造成的。 因此,在这些情况下不应执行颜色转换。

建议源和目标 DMP 之间只有一个 GMMP。 从 DMP/CAMP 组合创建 (GBD) 的域边界说明。 后续 GMMP 在处理链中使用它们之前的 GDB,直到序列中接下来存在要使用的 DMP/CAMP GBD。 例如,假设序列 DMP1、CAMP1、GMMP1、GMMP2、GMMP3、DMP2、CAMP2、GMMP4、GMMP5、CAMP3、DMP3。 然后,GMMP1、GMMP2 使用 GBD1 作为其源和目标。 然后,GMMP3 使用 GBD1 作为源,使用 GBD2 作为目标。 然后,GMMP4 使用 GBD2 作为源和目标。 最后,GMMP5 使用 GBD2 作为源,使用 GBD3 作为目标。 这假定没有与它旁边的 GMMP 相同。

对于 WCS 配置文件,建议将呈现意向设置为 DWORD_MAX,以便在 WCS 配置文件句柄中使用 GMMP。 这是因为呈现意向数组优先于 HPROFILEs 指定的配置文件中指定或包含的呈现意向或色域映射模型。 呈现意向数组引用这些呈现意向的默认 GMMP。 理想情况下,在创建包含 WCS 配置文件信息的 HPROFILE 时,通过将一个或另一个 GMMP 设置为 NULL ,在源和目标设备之间只执行一个域映射。 任何使用 WCS DMP 的旧应用程序都将调用 GMMP 序列。 基于 DMP 和 CAMP 选择 GDB。 对于中间 GMMP 范围边界,使用源 GBD 和目标 GBD。

总之,如果 nIntents == 1,则基于已设置为 padwIntent 值的默认值*的 GMMP 设置第一个 GMM,除非该值DWORD_MAX,在这种情况下,将使用第二个配置文件中的嵌入 GMM 信息 (嵌入 GMM 信息为 GMMP,或者对于 ICC 配置文件, 对应于配置文件标头) 意向的基线 GMM。 其余的 GMM 是根据已设置为 RelativeColorimetric 的默认*的 GMMP 设置的。

如果 nIntents = nProfiles -1,则每个 GMM 都基于 GMMP 进行设置,该 GMMP 设置为相应索引处 的 padwIntent 数组中的值的默认*,除非 padwIntent 值DWORD_MAX。 对于 padwIntent 数组中DWORD_MAX的值,基于两个配置文件中第二个的嵌入 GMM 信息(其范围由 GMM 映射)设置位于相应位置的 GMM。 (同样,嵌入的 GMM 信息要么是 GMMP,要么是 ICC 配置文件中对应于配置文件标头) 意向的基线 GMM。

如果 nIntents = nProfiles,则忽略第一个意向,并且函数的行为与 在 nIntents = nProfiles -1 的情况下相同。

padwIntentsnIntents 的任何其他组合都将返回错误。

* “set as default”表示使用 WcsGetDefaultColorProfile 查询默认 GMMP,其 profileManagementScope 参数设置为 WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER。 这可能会返回当前用户或系统范围的默认值,如 WcsGetDefaultColorProfile 的文档中所述。

** “GMM 对应于”并不意味着“GMM 来自将 GMMP 设置为默认值”。 而是表示“ICC 配置文件意向与基线 GMM 算法之间的持续关联”。

对 ICC ColorSpace 配置文件的 WCS 转换支持仅限于 RGB 颜色空间配置文件。 以下 ICC 配置文件类型不能用于 CITE 处理的转换(混合 WCS/ICC 转换或具有 WCS_ALWAYS 集的全 ICC 转换):

  • 非 RGB ColorSpace 配置文件
  • NamedColor 配置文件
  • n 通道配置文件 (其中 n > 8)
  • DeviceLink 配置文件
  • 抽象配置文件

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 icm.h
Library Mscms.lib
DLL Mscms.dll

另请参阅