setICMMode 函数 (wingdi.h)

SetICMMode 函数会导致在给定设备上下文 (DC) 上启用、禁用或查询图像颜色管理。

语法

int SetICMMode(
  HDC hdc,
  int mode
);

参数

hdc

标识设备上下文的句柄。

mode

打开和关闭图像颜色管理。 此参数可以采用以下常量值之一。

 

含义
ICM_ON
启用颜色管理。 关闭半色调的旧式颜色更正。
ICM_OFF
关闭颜色管理。 启用半色调的旧式颜色更正。
ICM_QUERY
查询颜色管理的当前状态。
ICM_DONE_OUTSIDEDC
关闭 DC 内部的颜色管理。 在 Windows 2000 下,还会关闭半色调的旧式颜色更正。 在 Windows 95 下不受支持。

返回值

如果此函数成功,则返回值为非零值。

如果此函数失败,则返回值为零。

如果指定了ICM_QUERY并且函数成功,则返回的非零值ICM_ON或ICM_OFF指示当前模式。

注解

如果系统找不到与设备状态匹配的 ICC 颜色配置文件, SetICMMode 将失败并返回零。

为设备上下文启用 WCS (DC) 后,使用大多数 Win32 API 函数传入 DC 的颜色将匹配颜色。 主要异常是 BitBltStretchBlt。 假设在从一个 DC 到另一个 DC 执行位块传输 (blit) 时,这两个 DC 已经兼容,无需颜色更正。 如果不是这种情况,可以执行颜色更正。 具体而言,如果将与设备无关的位图 (DIB) 用作 blit 的源,并且 blit 在启用了 WCS 的 DC 中执行,则将执行颜色匹配。 如果这不是你想要的,请在调用 BitBltStretchBlt 之前通过调用 SetICMMode 关闭目标 DC 的 WCS。

如果使用 CreateCompatibleDC 函数在 DC 中创建位图,则位图的颜色可以匹配两次,在创建时匹配一次,在执行 blit 时匹配一次。 原因是 由 CreateCompatibleDC 函数创建的 DC 中的位图获取源 DC 的当前画笔、笔和调色板。 但是,对于新 DC,默认情况下将禁用 WCS。 如果以后使用 SetICMMode 函数为新 DC 启用 WCS,则将进行颜色更正。 若要防止通过使用 CreateCompatibleDC 函数进行双重颜色更正,请在调用 CreateCompatibleDC 函数之前,使用 SetICMMode 函数关闭源 DC 的 WCS。

从打印机的 DC 创建兼容的 DC (请参阅 CreateCompatibleDC ) ,如果为打印机的 DC 启用,则始终执行颜色匹配。 使用 SetDIBitsToDeviceStretchDIBits 将 blit 执行到打印机 DC 时,将使用打印机的默认颜色配置文件。 如果这不是你想要的,请在调用 SetDIBitsToDeviceStretchDIBits 之前通过调用 SetICMMode 来关闭打印机 DC 的 WCS。

此外,在打开 WCS 的情况下打印到打印机的 DC 时,需要在每次调用 StartPage 函数后调用 SetICMMode 函数以重新打开 WCS。 StartPage 函数调用 RestoreDCSaveDC 函数,这会导致关闭打印机 DC 的 WCS。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h
Library Gdi32.lib
DLL Gdi32.dll

另请参阅