setICMMode 函数 (wingdi.h)
SetICMMode 函数会导致在给定设备上下文 (DC) 上启用、禁用或查询图像颜色管理。
语法
int SetICMMode(
HDC hdc,
int mode
);
参数
hdc
标识设备上下文的句柄。
mode
打开和关闭图像颜色管理。 此参数可以采用以下常量值之一。
值 | 含义 |
---|---|
|
启用颜色管理。 关闭半色调的旧式颜色更正。 |
|
关闭颜色管理。 启用半色调的旧式颜色更正。 |
|
查询颜色管理的当前状态。 |
|
关闭 DC 内部的颜色管理。 在 Windows 2000 下,还会关闭半色调的旧式颜色更正。 在 Windows 95 下不受支持。 |
返回值
如果此函数成功,则返回值为非零值。
如果此函数失败,则返回值为零。
如果指定了ICM_QUERY并且函数成功,则返回的非零值ICM_ON或ICM_OFF指示当前模式。
注解
如果系统找不到与设备状态匹配的 ICC 颜色配置文件, SetICMMode 将失败并返回零。
为设备上下文启用 WCS (DC) 后,使用大多数 Win32 API 函数传入 DC 的颜色将匹配颜色。 主要异常是 BitBlt 和 StretchBlt。 假设在从一个 DC 到另一个 DC 执行位块传输 (blit) 时,这两个 DC 已经兼容,无需颜色更正。 如果不是这种情况,可以执行颜色更正。 具体而言,如果将与设备无关的位图 (DIB) 用作 blit 的源,并且 blit 在启用了 WCS 的 DC 中执行,则将执行颜色匹配。 如果这不是你想要的,请在调用 BitBlt 或 StretchBlt 之前通过调用 SetICMMode 关闭目标 DC 的 WCS。
如果使用 CreateCompatibleDC 函数在 DC 中创建位图,则位图的颜色可以匹配两次,在创建时匹配一次,在执行 blit 时匹配一次。 原因是 由 CreateCompatibleDC 函数创建的 DC 中的位图获取源 DC 的当前画笔、笔和调色板。 但是,对于新 DC,默认情况下将禁用 WCS。 如果以后使用 SetICMMode 函数为新 DC 启用 WCS,则将进行颜色更正。 若要防止通过使用 CreateCompatibleDC 函数进行双重颜色更正,请在调用 CreateCompatibleDC 函数之前,使用 SetICMMode 函数关闭源 DC 的 WCS。
从打印机的 DC 创建兼容的 DC (请参阅 CreateCompatibleDC ) ,如果为打印机的 DC 启用,则始终执行颜色匹配。 使用 SetDIBitsToDevice 或 StretchDIBits 将 blit 执行到打印机 DC 时,将使用打印机的默认颜色配置文件。 如果这不是你想要的,请在调用 SetDIBitsToDevice 或 StretchDIBits 之前通过调用 SetICMMode 来关闭打印机 DC 的 WCS。
此外,在打开 WCS 的情况下打印到打印机的 DC 时,需要在每次调用 StartPage 函数后调用 SetICMMode 函数以重新打开 WCS。 StartPage 函数调用 RestoreDC 和 SaveDC 函数,这会导致关闭打印机 DC 的 WCS。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | wingdi.h |
Library | Gdi32.lib |
DLL | Gdi32.dll |