SetICMMode

SetICMMode 関数は、指定したデバイスコンテキスト(DC)上でイメージカラーマネジメントを有効化、無効化、または問い合わせる。

SetICMMode hdc, mode

hdc : [intptr] デバイスコンテキストへのハンドルを識別する。
mode : [int] イメージカラーマネジメントをオンまたはオフにする。このパラメータは次の定数値のいずれかを取ることができる。

(プラグイン / モジュール : gdi32.dll)

解説

SetICMMode 関数は、指定したデバイスコンテキスト(DC)上でイメージカラーマネジメントを有効化、無効化、または問い合わせる。

[戻り値]
この関数が成功した場合、戻り値は非ゼロ値である。この関数が失敗した場合、戻り値はゼロである。ICM_QUERY
が指定されて関数が成功した場合、返される非ゼロ値は現在のモードを示す ICM_ON または ICM_OFF である。

[備考]
システムがデバイスの状態に一致する ICC カラープロファイルを見つけられない場合、SetICMMode
は失敗してゼロを返す。デバイスコンテキスト(DC)に対して WCS が有効になると、ほとんどの Win32 API 関数を使って DC
に渡される色はカラーマッチングされる。主な例外は BitBltStretchBlt である。ある DC から別の DC
へのビットブロック転送(blit)を行う場合、2 つの DC
はすでに互換性があり、カラー補正は必要ないと仮定される。そうでない場合、カラー補正が実行されることがある。具体的には、デバイス独立ビットマップ(DIB)を
blit のソースとして使用し、blit を WCS が有効な DC
に行う場合、カラーマッチングが実行される。これが望ましくない場合、BitBlt または StretchBlt を呼ぶ前に
SetICMMode を呼び出して、コピー先 DC の WCS をオフにする。CreateCompatibleDC 関数を使用して DC
内にビットマップを作成する場合、ビットマップは 2 回カラーマッチングされる可能性がある。1 回は作成時、もう 1 回は blit
が実行されるときである。理由は、CreateCompatibleDC 関数で作成された DC 内のビットマップは、ソース DC
の現在のブラシ、ペン、パレットを取得するためである。しかし、新しい DC では WCS がデフォルトで無効になる。その後
SetICMMode 関数を使って新しい DC で WCS を有効にすると、カラー補正が行われる。CreateCompatibleDC
関数の使用による二重のカラー補正を防ぐには、CreateCompatibleDC 関数を呼び出す前に SetICMMode
関数を使って、ソース DC の WCS をオフにする。プリンタ DC から互換 DC
が作成されるとき(CreateCompatibleDC を参照)、プリンタ DC
に対して有効であれば、デフォルトでカラーマッチングが常に実行される。SetDIBitsToDevice または StretchDIBits
を使用してプリンタ DC に blit
を実行する場合、プリンタのデフォルトカラープロファイルが使用される。これが望ましくない場合、SetDIBitsToDevice または
StretchDIBits を呼ぶ前に SetICMMode を呼び出して、プリンタ DC の WCS をオフにする。また、WCS
を有効にしてプリンタ DC に印刷する場合、StartPage 関数の各呼び出しの後に WCS を再度オンにするために
SetICMMode 関数を呼ぶ必要がある。StartPage 関数は RestoreDCSaveDC
関数を呼び出し、その結果プリンタ DC の WCS がオフになる。

情報

プラグイン / モジュールgdi32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の gdi32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_gdi32_gen2.hs