色管理について ・色管理 ドローイングツールなどによってディスプレイ上でグラフィックを作成し、この結果をプ リンタに出力すると、プリントアウトされた色がイメージと異なる結果になることがある 。Windowsでは、このような問題に対処するために、色管理(Color Management)を導入し た。これは、ICM (Image Color Management)と呼ばれる。98及びNT5.0のICMのバージョン は2.0である。 システムが、色管理用に使用するディレクトリを取得するには、GetColorDirectoryを使 用する。 ----------------------------------------------------------------------------- ○GetColorDirectory 色に関するディレクトリの取得 Cの宣言: BOOL GetColorDirectory( PCTSTR MachineName, PTSTR DirName, PDWORD DirNameSize); 説明: Windowsの色に関するディレクトリ名を取得する。 この関数は98またはNT5.0以降で使用可能。 引数の意味は以下の通り。 MachineName (IN) NULLでなければならない。 DirName (OUT) 取得結果のディレクトリ名。 DirNameSize (IN/OUT) DirNameのサイズ。関数の実行後には、DirNameに設定されたデー タのサイズまたはDirNameに必要なサイズが返される。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- あるデバイスコンテキストに対して、ICMを有効化・無効化したり、ICMが有効であるかど うかを判定するには、SetICMModeを使用する。 ----------------------------------------------------------------------------- ○SetICMMode ICMの有効化・無効化の切り替え Cの宣言: int SetICMMode( HDC hDC, int Flag); 指定したデバイスコンテキストに対してICMを有効・無効にする。 この関数は95またはNT4.0以上で使用可能。 引数の意味は、以下の通り。 hDC ICMを有効・無効にするデバイスコンテキストのハンドル。 Flag ICMを有効にするかどうかを指定するフラグ。後述の表を参照。 Flagに指定可能なフラグは以下のいずれかの値である。 ICM_ON ICMを有効にする。旧形式のハーフトーン色は無効になる。 ICM_OFF ICMを無効にする。旧形式のハーフトーン色は有効になる。 ICM_QUERY 指定されたデバイスコンテキストでICMが有効かどうかをチェックする。 ICM_DONE_OUTSIDEDC ICMおよび旧形式のハーフトーン色を共に無効にする。(NTのみ) 戻り値は、関数の実行に成功したか否かを表す真偽値である。ただし、ICM_QUERYを指定 した場合、ICM_ONまたはICM_OFFが返され、実行に失敗した場合、0が返される。 ----------------------------------------------------------------------------- あるデバイスコンテキストでICMが有効になっているとき、そのデバイスが持つICMの情報 を利用して、パレットの色を補正することができる。この補正には、ColorCorrectPalett eを使用する。 ----------------------------------------------------------------------------- ○ColorCorrectPalette パレットエントリの補正 Cの宣言: BOOL ColorCorrectPalette( HDC hDC, HPALETTE hPalette, DWORD FirstEntry, DWORD EntryNum); 説明: 指定されたデバイスコンテキストで有効となっているICMによってパレットエントリの色 を補正する。 この関数は、98またはNT5.0以降で使用可能。 引数の意味は、以下の通り。 hDC 補正に利用されるデバイスコンテキストのハンドル。 hPalette 補正するパレットのハンドル。 FirstEntry 補正を行うパレット中のの最初のエントリ。 EntryNum 補正を行うパレットエントリの数。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ICM2.0をサポートするアプリケーションは、FileメニューのColor Managementを選択する ことにより、色管理ダイアログボックスを表示する。ダイアログボックスの表示には、Se tupColorMatchingを使用する。 ----------------------------------------------------------------------------- ○SetupColorMatching 色管理ダイアログボックスの表示 Cの宣言: BOOL SetupColorMatching(PCOLORMATCHSET ColorMatchSet); 説明: 色管理ダイアログボックスを表示する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 ColorMatchSet (IN/OUT) ダイアログボックスの初期状態を示す設定値。、ユーザがダイ アログボックスのOKボタンを押下した場合、ユーザによって設定された値が返される。 戻り値は関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・色空間とガモット 通常ディスプレイ上に表示されている任意の色は、Red、Green、Blueの三つの成分の混合 によって表される。三次元空間中の任意の点が、X成分、Y成分、Z成分の三つの値によっ て表されることを考えると、任意の色は、Red、Green、Blueの三つの値によって定義され る空間上のある一点であると考えることもできる。このRGBによる空間をRGBの色空間(Col or Space)と呼ぶ。ある色は、色空間上のある一点によって表すことができる。 色空間は、RGB以外によっても定義することができる。例えば、Cyan、Magenta、Yellow、 blacKの4色のインクを混合することによって色を表現するカラープリンタを考える。こ のプリンタが出力したある色は、各原色を成分に持つ4次元の色空間上の一点であると考 えることができる。この色空間はCMYK色空間である。 あるプリンタがCMYKの4色のインクを使用しているとする。そのプリンタが実際に表現で きる色は、CMYK色空間の全ての色ではなく、CMYK色空間中の一部の色のみである。この部 分集合をガモットと呼ぶ。ガモットは、あるデバイスがある色空間を使用しているとき、 そのデバイスが表現可能な色を表す、色空間中の部分集合である。 CheckColorsInGamutを使用すると、ある色が、特定のデバイスのガモット中に含まれるか どうかを判定することができる。判定の際には、複数の色を一度に判定可能である。従っ て判定結果は配列の形で返される。得られた結果が0の時、その色がガモット中に含まれ ることを表す。1〜254のとき、ガモット中に含まれていないことを表す。このときには、 結果に1を足した値が、その色がガモットからどの程度離れた色かをあらわす値となる。 その値の実際の意味は ICC Profile Format Specification に記述されている。このよう な色の判定関数の多くは、上述のような1バイトの値が返される。 ----------------------------------------------------------------------------- ○CheckColorsInGamut 与えられた色がデバイスの出力ガモット中の色かどうかを判定 Cの宣言: BOOL CheckColorsInGamut( HDC hDC, LPVOID RGBTriples, LPVOID Result, UINT Count); 説明: CheckColorsInGamut関数は、RGBTriplesで指定されたRGBの配列が、hDCで指定されたデバ イスの出力ガモット中の色かどうかを判定する。RGBTriplesは、入力色空間の種別により その意味が解釈される。 この関数は95またはNT4.0以上で使用可能。 判定の結果はResultに返される。バッファに返される値は、RGBTriplesの配列の要素一つ につき、0〜255までの値を取る、1バイトの値が返される(従って、Resultのサイズは少な くともCount以上でなければならない。)。Resultに返された値が0のときは、ガモット中 に指定された色が存在することを表す。1以上のときの意味は、ICCプロファイルフォーマ ット仕様のドキュメントを見よ。 引数の意味は以下の通り。 hDC (IN) 判定先のデバイスを表すデバイスコンテキストのハンドル。 RGBTriples (IN) 判定元の色を表す配列 Result (OUT) 判定結果が出力されるバッファ。 Count (IN) RGBTriplesの配列の要素の数。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- デバイスは、後述の通り、入力色空間(Input Color Space)や、出力プロファイル(Output Profile)を持つ。あるデバイスに対して入力色空間を取得するにはGetColorSpace、出力 プロファイルを取得するにはGetICMProfiileを使用する。逆に、あるデバイスに対して入 力色空間を設定するにはSetColorSpace、出力プロファイルを設定するには、SetICMProfi leを使用する。メモリDCに設定可能な出力プロファイルはRGB型のプロファイルのみであ る。また、95では、ポストスクリプトプリンタのデバイスコンテキストに設定できるプロ ファイルは、CMYK型のプロファイルのみである。他の場面でも、この制限が適用される場 合がある。 ----------------------------------------------------------------------------- ○GetColorSpace 入力色空間の取得 Cの宣言: HCOLORSPACE GetColorSpace(HDC hDC); 説明: hDCで指定したデバイスコンテキストの入力色空間のハンドルを取得する。 この関数は、95以降またはNT4.0以降で使用可能。 引数の意味は、以下の通り。 hDC 取得元のデバイスコンテキストのハンドル。 戻り値は、取得結果の色空間のハンドルである。 ○GetICMProfile 出力カラープロファイルの取得 Cの宣言: BOOL GetICMProfile( HDC hDC, LPDWORD FileNameSize, LPCTSTR FileName); 説明: hDCで指定したデバイスコンテキストの現在の出力カラープロファイルのファイル名を取 得する。 この関数は95またはNT4.0以降で使用可能。 引数の意味は、以下の通り。 hDC (IN) 取得元のデバイスコンテキストのハンドル。 FileNameSize (IN/OUT) FileNameのサイズ。バッファが小さすぎる場合、必要なサイズが 返される。 FileName (OUT) プロファイルのファイル名。 ○SetColorSpace 入力色空間の設定 Cの宣言: HCOLORSPACE SetColorSpace(HDC hDC, HCOLORSPACE hColorSpace); 説明: hDCで指定したデバイスコンテキストの入力色空間を設定する。 この関数は95またはNT4.0以降で使用可能。 引数の意味は以下の通り。 hDC 設定先のデバイスコンテキストのハンドル hColorSpace 設定する色空間のハンドル 関数の実行に成功した場合、hColorSpaceのハンドル値が返される。失敗した場合、NULL が返される。 ○SetICMProfile 出力カラープロファイルの設定 BOOL SetICMProfile(HDC hDC, LPSTR FileName); 説明: hDCで指定したデバイスコンテキストの出力カラープロファイルを設定する。 この関数は95またはNT4.0以降で使用可能。 引数の意味は以下の通り。 hDC 設定先のデバイスコンテキストのハンドル FileName 設定するプロファイルのファイル名。メモリDCに設定可能なプロファイルはRGB 型の色プロファイルのみである。また、95では、ポストスクリプトプリンタのデバイスコ ンテキストに設定できるカラープロファイルは、CMYK型のカラープロファイルのみである 。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・デバイスに依存しない色空間 上記で挙げた色空間は、ディスプレイ、プリンタと、デバイスを明示していることからも 分かるとおり、デバイス依存の色空間である。一方、CIE(Commission International de I'Eclairage)という組織は、デバイスに依存しない色空間を提案した。この色空間は抽象 的な色成分のX、Y、Zを使用して定義され、XYZ色空間と呼ばれる。 これに対して、HPとMicrosoftは、sRGBと呼ばれる、デバイスに依存しない色空間を提案 した。sRGB色空間は、XYZ色空間に対してデータ量が少なくてすむという利点がある。 ・色空間の作成と削除 色空間の作成には、CreateColorSpaceを使用する。CreateColorSpaceで作成した色空間は 、DeleteColorSpaceで削除する。 また、特定の色空間の情報を取得するには、GetLogColorSpace関数を使用する。 ----------------------------------------------------------------------------- ○CreateColorSpace 色空間の作成 Cの宣言: HCOLORSPACE CreateColorSpace(LPLOGCOLORSPACE LogColorSpace); 説明: 色空間を作成する。 この関数は、95またはNT4.0以降で使用可能である。 引数の意味は以下の通り。 LogColorSpace 作成する色空間の情報。 戻り値は、作成した色空間のハンドルである。 メモ...LOGCOLORSPACEの宣言: DWORD lcsSignature LCS_SIGNATUREでなければならない。 DWORD lcsVersion 0x400でなければならない。 DWORD lcsSize 構造体のサイズ。 LCSCSTYPE lcsCSType 色空間のタイプ。色がどのような値によって表されるかを指定する フラグである。 LCS_CALIBRATED_RGB 色はRGB値で表される。また、RGB値は、デバイスに渡される前にpc sEndpointsで指定されるエンドポイントによって変換される。 LCS_sRGB 色はsRGBの値で表される。 LC_WINDOWS_COLOR_SPACE 色は、Windowsのデフォルトの色空間の値によって表される。 LCSGAMUTMATCH lcsIntent ガモットのマッピング方法。 LCS_GM_ABS_COLORIMETRIC 白色点を保つ。色を、変換先のガモット中の最も近い色に一 致させる。 LCS_GM_BUSINESS 純度を保つ。 LCS_GM_GRAPHICS 色を保つ。 LCS_GM_IMAGES コントラストを保つ。 CIEXYZTRIPLE lcsEndpoints 赤、緑、青のエンドポイント。lcsCSTypeがLCS_CALIBRATED_ RGB以外の場合、無視される。 DWORD lcsGammaRed 赤のガンマ補正量 DWORD lcsGammaGreen 緑のガンマ補正量 DWORD lcsGammaBlue 青のガンマ補正量 TCHAR lcsFilename カラープロファイルのファイル名。 ○DeleteColorSpace 色空間の削除 Cの宣言: BOOL DeleteColorSpace(HCOLORSPACE hColorSpace); 説明: 色空間を削除する。 この関数は、95またはNT4.0以降で使用可能。 引数の意味は、以下の通り。 hColorSpace 削除する色空間のハンドル。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○GetLogColorSpace 色空間情報の取得 Cの宣言: BOOL GetLogColorSpace( HCOLORSPACE hColorSpace, LPLOGCOLORSPACE LogColorSpace, DWORD LogSize); 説明: hColorSpaceで指定した色空間の情報をLOGCOLORSPACEの形で取得する。 この関数は95またはNT4.0以降で使用可能。 引数の意味は、以下の通り。 hColorSpace 情報の取得元の色空間のハンドル LogColorSpace 取得結果の情報を格納するバッファ LogSize LogColorSpaceのサイズ 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ICM2.0が色変換のために使用する、デバイスに依存しない色空間を、プロファイル接続空 間(Profile Connection Space)、PCSと呼ぶ。 ・色変換とカラーマッチング ドローイングツールなどによってディスプレイ上でグラフィックを作成し、この結果をプ リンタに出力する場合を考える。行うべきことは、ディスプレイのガモットをプリンタの ガモットに変換することである。 ディスプレイの色空間をRGB色空間、プリンタの色空間をCMYK色空間とする。結果をプリ ンタに出力するには、まずRGB色空間をCMYK色空間に変換する。次に、変換結果の色を、 そのプリンタのガモット中で最も近い色に変換する。前者の色空間から色空間への変換を 、色変換(Color Conversion)と呼び、後者の、最も近い色に変換する処理をカラーマッチ ング(Color Matching)と呼ぶ。(Color Mappingとも呼ぶ) また、ディスプレイ上の色とプリントアウトした結果の色がまったく同じであっても、人 間の目には異なってみえる場合がある。これに対する補正を、ガンマ補正(Gamma Correct ion)と呼ぶ。(Gammaは写真の分野で、「ネガのコントラストの程度を表す単位」(旺文社 、英和中辞典)として用いられる。) ガンマ補正に関する関数として、GetDeviceGammaRampとSetDeviceGammaRampが用意されて いる。 ICM2.0による実際の色変換は、まずRGB色空間などのデバイス依存色空間をデバイスに依 存しない色空間に変換した後に、変換結果のデバイスに依存しない色空間を、CMYK色空間 などの他のデバイス依存色空間に変換する。それぞれの変換のための情報はデバイスプロ ファイル(詳細は後述)と呼ばれるファイルで記述される。 ・試し刷り このような色変換やカラーマッチングを用いると、ディスプレイ上に、プリントアウトの プレビューイメージを表示させることができる。つまり、まず前述の通りディスプレイ上 の色をプリンタの色に変換する。次に、変換されたCMYK色空間上の色を、RGB色空間上の 色に色変換する。最後に、ディスプレイで表現できる色にカラーマッチングする。これに より、印刷結果を画面上でプレビューすることができる。これを試し刷り(Proofing)と呼 ぶ。 このような試し刷りを簡易に行うために、ColorMatchToTargetという関数が用意されてい る。この関数にディスプレイDCとプリンタDCを渡すと、以後ディスプレイDCへの描画は、 上記変換が自動的に行われた後に、ディスプレイに結果が表示される。 ----------------------------------------------------------------------------- ○ColorMatchToTarget カラーマッピングを行う Cの宣言: BOOL ColorMatchToTarget( HDC hDC, HDC hTagetDC, DWORD Flag); 説明: hDCで指定されたデバイスへの描画の際に、hTagetDCで指定されたデバイスコンテキスト のガモットにカラーマッピングを行ってから、hDCで指定されたデバイスコンテキストの ガモットにカラーマッピングを行い、その結果を描画結果として出力するようにする。 この関数は95またはNT4.0以降で使用可能である。 引数の意味は、以下の通り。 hDC 出力結果を表示するデバイスのコンテキストハンドル。 hTagetDC 初めにカラーマッピングを行う際のガモットを参照するためのデバイスコンテ キスト。 Flag どのようなプレビューを得たいのかを指定するフラグ。後述の表を参照。 Flagに指定可能な値は、以下のいずれかである。 CS_ENABLE カラーマッピングを行う。 CS_DISABLE カラーマッピングを行わない。 CS_DELETE_TRANSFORM 変換情報を削除する。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・デバイスプロファイル デバイスプロファイル(Device Profile)は、色空間中の色をデバイスに依存しない色空間 中の色へ変換する方法、特定のデバイスのガモット中の色をデバイスに依存しない色空間 中の色へ変換する方法、PCS中の色を色空間や特定のデバイスのガモット中の色に変換す る方法、の情報が記述されているファイルである(バイナリデータであることもある)。一 つのデバイスは、関連する複数のプロファイルを持つことができる。 プロファイルを利用する処理では、プロファイルのハンドルが必要である。プロファイル を新規作成またはオープンするには、OpenColorProfileを使用する。オープンしたプロフ ァイルをクローズするには、CloseColorProfileを使用する。色空間情報を元に、新規に プロファイルを作成するには、CreateProfileFromLogColorSpaceを使用する。 ----------------------------------------------------------------------------- ○OpenColorProfile 色プロファイルのオープン Cの宣言: HPROFILE OpenColorProfile( PPROFILE Profile, DWORD AccessFlag, DWORD ShareMode, DWORD CreationMode); 説明: Profileで指定した色プロファイルをオープンする。 この関数は98またはNT5.0で使用可能である。 引数の意味は以下の通り。 Profile オープンする色プロファイルを表す情報。 AccessFlag オープンする色プロファイルのアクセスの方法を表すフラグ。後述の表を参 照。 ShareMode オープンする色プロファイルの共有方法を表すフラグ。後述の表を参照。 CreationMode オープンの仕方を表すフラグ。後述の表を参照。 AccessFlagに指定可能なフラグは以下の値のいずれかである。 PROFILE_READ 読み込みのみのアクセス。 PROFILE_READWRITE 読み書きのアクセス。 ShareModeに指定可能なフラグは以下の値の組み合わせである。 FILE_SHARE_READ オープンした色プロファイルを他の場所で読み込みアクセスでオープン 可能とする。 FILE_SHARE_WRITE オープンした色プロファイルを他の場所で書き込みアクセスでオープ ン可能とする。 CreationModeに指定可能なフラグは以下の値のいずれかである。 CREATE_NEW 常に新規に色プロファイルを作成する。Profileに一致する色プロファイルが 既に存在する場合、関数は失敗する。 CREATE_ALWAYS 常に新規に色プロファイルを作成する。Profileに一致する色プロファイ ルが既に存在する場合、上書きされる。 OPEN_EXISTING 既に存在する色プロファイルをオープンする。Profileに一致する色プロ ファイルが存在しない場合、関数は失敗する。 OPEN_ALWAYS 既に存在する色プロファイルをオープンする。Profileに一致する色プロフ ァイルが存在しない場合、新規に作成される。 TRUNCATE_EXISTING 既に存在する色プロファイルをオープンし、サイズを0に初期化する 。Profileに一致する色プロファイルが存在しない場合、関数は失敗する。 戻り値は、オープンまたは作成した色プロファイルのハンドルである。関数の実行に失敗 した場合、NULLが返される。 ○CloseColorProfile プロファイルのクローズ Cの宣言: BOOL CloseColorProfile(HPROFILE hProfile); 説明: hProfileで指定されたプロファイルを閉じる。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfile クローズするプロファイルのハンドル。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○CreateProfileFromLogColorSpace 色空間を色プロファイルに変換 Cの宣言: BOOL CreateProfileFromLogColorSpace( LPLOGCOLORSPACE LogColorSpace, PBYTE *Buffer); 説明: LogColorSpaceで指定された色空間をデバイスプロファイルに変換し、結果をBufferに返 す。 この関数は98またはNT5.0で使用可能。 Bufferに返された情報はGlobalFreeで開放しなければならない。 引数の意味は以下の通り。 LogColorSpace 変換元の色空間の情報。lcsFilenameは長さ0の文字列でなければならない 。 Buffer 変換結果のプロファイルへの情報を格納するポインタ変数へのポインタ。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- プロファイルのヘッダ情報を取得するには、GetColorProfileHeaderを使用する。プロフ ァイルのヘッダ情報を設定するには、SetColorProfileHeaderを使用する。 ----------------------------------------------------------------------------- ○GetColorProfileHeader プロファイルヘッダの取得 Cの宣言: BOOL GetColorProfileHeader(HPROFILE hProfile, HPROFILEHEADER ProfileHeader); 説明: hProfileで指定した色プロファイルのプロファイルヘッダを取得する。 この関数は98またはNT5.0で使用可能である。 引数の意味は以下の通り。 hProfile 取得元の色プロファイルのハンドル。 ProfileHeader 取得結果のプロファイルヘッダ。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- あるデバイスに対して、システムがサポートしているプロファイルを列挙するには、Enum ICMProfilesを使用する。指定された条件を満たすプロファイルを列挙するには、EnumCol orProfilesを使用する。 ----------------------------------------------------------------------------- ○EnumICMProfiles 色に関するプロファイルの列挙 Cの宣言: int EnumICMProfiles( HDC hDC, ICMENUMPROC EnumFunc, LPARAM lParam); 説明: hDCで指定されたデバイスに対する、システムがサポートするプロファイルを列挙する。 この関数は、95またはNT4.0以降で使用可能。 引数の意味は、以下の通り。 hDC 列挙元のデバイスコンテキストのハンドル。 EnumFunc 列挙の際に各々のプロファイルごとに呼ばれるコールバック関数。 lParam コールバック関数に渡すパラメータ。 戻り値は、コールバック関数が返した値。色に関するプロファイルが一つもない場合、-1 が返される。 ○EnumColorProfiles 色プロファイルの列挙 Cの宣言: BOOL EnumColorProfiles( PCTSTR MachineName, PENUMTYPE EnumCriteria, PBYTE Buffer, PDWORD BufferSize, PDWORD ProfileNum); 説明: EnumCriteriaで指定した列挙情報に基づいて色プロファイルを列挙し、結果をBufferに格 納する。 この関数は98またはNT5.0で使用可能である。 引数の意味は以下の通り。 MachineName (IN) NULLでなければならない。 EnumCriteria (IN) 列挙に使用される情報。 Buffer (OUT) 列挙結果の色プロファイルの名前。MULTI_SZの形式で返される。 BufferSize (IN/OUT) Bufferのサイズ。関数の実行後に、実際にBufferに格納したデータ のサイズ、または必要なサイズが返される。 ProfileNum (OUT) Bufferに返されたプロファイル名の数。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- あるデバイスに対して、プロファイルを関連付けるには、AssociateColorProfileWithDev iceを使用する。関連付けを解除するには、DisassociateColorProfileFromDeviceを使用 する。 ----------------------------------------------------------------------------- ○AssociateColorProfileWithDevice 色プロファイルをデバイスと関連付ける Cの宣言: BOOL AssociateColorProfileWithDevice( PCTSTR MachineName, PCTSTR ProfileName, PCTSTR DeviceName); 説明: ProfileNameで指定された色プロファイルをDeviceNameで指定されたデバイスに関連付け る。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 MachineName NULLでなければならない。 ProfileName 関連付けるプロファイルの名前。 DeviceName 関連付けるデバイスの名前。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○DisassociateColorProfileFromDevice デバイスと色プロファイルの関連付けの開放 Cの宣言: BOOL DisassociateColorProfileFromDevice( PCTSTR MachineName, PCTSTR ProfileName, PCTSTR DeviceName); 説明: ProfileNameで指定された色プロファイルとDeviceNameで指定されたデバイスとの関連付 けを解除する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 MachineName NULLでなければならない。 ProfileName 色プロファイルの名前。 DeviceName デバイスの名前。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- プロファイルが、ICCの正しい形式かどうかを判定するには、IsColorProfileValidを使用 する。 ----------------------------------------------------------------------------- ○IsColorProfileValid 正しいICCの色プロファイルかどうかの判定 Cの宣言: BOOL IsColorProfileValid(HPROFILE hProfile, PBOOL Valid); 説明: hProfileで指定した色プロファイルがICCの形式として正しい色プロファイルかどうか判 定する。 この関数は98またはNT5.0以降で使用可能である。 引数の意味は以下の通り。 hProfile 判定する色プロファイルのハンドル。 Valid 判定結果の真偽値。 戻り値は関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- 特定のディスプレイの色を特定のプリンタの色に変換するには、まず、特定のディスプレ イの色をPCS中の色に変換した後に、PCS中の色をプリンタの色に変換する。(ここでは、P CSが、二つのプロファイル間の橋渡し役となっている。このために、Profile Connection Spaceと呼ばれる。) この処理では、前者の変換を記述したプロファイルと、後者の変換を記述したプロファイ ルを使用することになる。ICM2.0では、この二つのプロファイルを連結して一つのファイ ルにすることができる。これを、デバイスリンクプロファイル(Device Link Profile)と 呼ぶ。デバイスリンクプロファイルを作成するには、CreateDeviceLinkProfileを使用す る。 ----------------------------------------------------------------------------- ○CreateDeviceLinkProfile デバイスリンクプロファイルの作成 Cの宣言: BOOL CreateDeviceLinkProfile( PHPROFILE hProfiles, DWORD ProfileNum, PDWORD Intents, DWORD IntentNum, DWORD Flags, PBYTE *ProfileData, DWORD CMMIndex); 説明: 指定した色プロファイルの配列を元にデバイスリンクプロファイルを作成する。 この関数は98またはNT5.0で使用可能。 作成したプロファイルデータは、GlobalFreeで開放しなければならない。 引数の意味は以下の通り。 hProfiles (IN) 作成元の色プロファイルのハンドルの配列。配列の最初及び最後のハン ドルは、デバイスプロファイルを識別するものでなければならない。また、配列中のプロ ファイルの出力色空間が、次のプロファイルの入力色空間となっていなければならない。 ProfileNum (IN) hProfilesで指定した配列の要素の数。 Intents (IN) hProfilesで指定した各々のプロファイルの使用意図を表す配列。Intents 中の各要素に設定可能な値は後述の表を参照。 IntentNum (IN) Intentsで指定した配列の要素の数。 Flags (IN) 色変換の為のフラグ。後述の表を参照。 ProfileData (OUT) 作成したデバイスリンクプロファイルのデータを指すポインタが返さ れるバッファを指すポインタ。 CMMIndex (IN) 使用する色管理モジュールを指定するプロファイルのインデックス。INDE X_DONT_CAREを指定した場合、自動的にCMMが選択される。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- プロファイルは、入力プロファイル(Input Profile)、ディスプレイプロファイル(Displa y Profile)、出力プロファイル(Output Profile)の三種類のプロファイルがある。それぞ れ主に、スキャナ、ディスプレイ、プリンタに用いられる。 また、別の種類として、デバイスプロファイル(Device Profile)、抽象プロファイル(Abs tract Profile)、デバイスリンクプロファイル(Device Link Profile)、名前付き色プロ ファイル(Named Color Profile)、色空間プロファイル(Color Space Profile)がある。デ バイスプロファイルは、特定のデバイスの色空間について記述したプロファイルである。 抽象プロファイルは色をPCSで変換する際の一般的な方法を記述したプロファイルである 。 色空間プロファイルはデバイスに依存しない色空間について記述したプロファイルである 。システムの標準色空間の色空間プロファイルの取得・設定には、GetStandardColorSpac eProfile及びSetStandardColorSpaceProfileを使用する。 ----------------------------------------------------------------------------- ○GetStandardColorSpaceProfile 標準色プロファイルの取得 Cの宣言: BOOL GetStandardColorSpaceProfile( PCTSTR MachineName, DWORD ColorSpaceID, PTSTR ProfileName, PDWORD ProfileNameSize); 説明: ColorSpaceIDで指定した標準色空間の色プロファイルの名前をProfileNameに格納する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 MachineName (IN) NULLでなければならない。 ColorSpaceID (IN) 取得元の標準色空間のID。 ProfileName (OUT) 取得結果のプロファイル名。NULLを指定した場合、ProfileNameSize に必要なサイズが返される。 ProfileNameSize (IN/OUT) ProfileNameのサイズ。関数の実行後、実際にProfileNameに 格納したプロファイル名のサイズまたは必要なサイズが返される。 戻り値は、関数の実行に成功したか否かをあらわす真偽値である。 ----------------------------------------------------------------------------- 名前付き色プロファイルは名前付き色で構成される色空間について記述したプロファイル である。色の名前と名前付き色プロファイルをConvertColorNameToIndexに渡すことによ り、色の名前を、そのプロファイル中でのインデックスに変換することができる。また、 その逆変換を行うにはConvertIndexToColorNameを使用する。 ----------------------------------------------------------------------------- ○ConvertColorNameToIndex 色名を色プロファイルのインデックスに変換 Cの宣言: BOOL COnvertColorNameToIndex( HPROFILE hProfile, PCOLOR_NAME ColorNames, PDWORD Indexes, DWORD ColorNameNum); 説明: ColorNamesで与えられた、名前付き色空間中の色名の配列から、各色名に対応する色のイ ンデックスを求め、各々の結果をIndexesに返す。 この関数は98またはNT5.0で使用可能。 引数の意味は、以下の通り。 hProfile (IN) どの名前付き色プロファイルを元にインデックスを求めるかを指定するた めのプロファイルのハンドル ColorNames (IN) 取得元の色名の配列 Indexes (IN) 求めたインデックスが返されるバッファ ColorNameNum (IN) ColorNamesの要素の数 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○ConvertIndexToColorName 色のインデックスを色名に変換 Cの宣言: BOOL ConvertINdexToColorName( HPROFILE hProfile, PDWORD Indexes, PCOLOR_NAME ColorNames, DWORD IndexNum); 説明: Indexesで与えられた名前付き色空間中の色のインデックスの配列について、各々のイン デックスに対応する色名を求め、結果をColorNamesに格納する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfile (IN) どの名前付き色空間上で変換を行うかを指定するための色プロファイル Indexes (IN) 変換元のインデックスの配列 ColorNames (OUT) 変換結果の色名 IndexNum (IN) Indexesの要素の数 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- 名前付き色プロファイルの情報を取得するには、GetNamedProfileInfo関数を使用する。 ----------------------------------------------------------------------------- ○GetNamedProfileInfo 名前付き色プロファイルの情報の取得 Cの宣言: BOOL GetNamedProfileInfo( HPROFILE hProfile, PNAMED_PROFILE_INFO Info); 説明: hProfileで指定した名前付き色プロファイルの情報を取得する。 この関数は98またはNT5.0以降で使用可能。 引数の意味は、以下の通り。 hProfile 情報の取得元のプロファイルのハンドル。 Info 取得結果の情報を格納するバッファ。 戻り値は関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- デバイスプロファイルは、DIBの中に埋め込むことができる。ICM2.0では、新しいビット マップヘッダが定義されており、これを用いてイメージにプロファイルデータを埋め込ん だり、プロファイルへのリンクを張ったりすることができる。このヘッダはBITMAPV5HEAD ERとして定義されている。 プロファイルを特定のマシンへインストールするには、InstallColorProfileを使用する 。案インストールするには、UninstallColorProfileを使用する。 ----------------------------------------------------------------------------- ○InstallColorProfile 色プロファイルのインストール Cの宣言: BOOL InstallColorProfile( PCTSTR MachineName, PCTSTR ProfileName); 説明: MachineNameで指定したマシンにProfileNameで指定したプロファイルをインストールする 。 この関数は98またはNT5.0で使用可能である。 引数の意味は以下の通り。 MachineName NULLでなければならない。 ProfileName インストールするプロファイルの名前。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・プロファイルのタグ付き要素 プロファイル中には、タグのついたデータが含まれることがある。特定のタグに対して、 対応する要素のデータを取得するには、GetColorProfileElementを使用する。また、ある プロファイルに含まれるタグつき要素のタグ名を、インデックスによって取得するには、 GetColorProfileElementTagを使用する。特定のプロファイルに含まれるタグつき要素の 総数を取得するには、GetCountColorProfileElementsを使用する。特定のタグがプロファ イル中に存在するかどうかを判定するには、IsColorProfileTagPresentを使用する。 ----------------------------------------------------------------------------- ○GetColorProfileElement 色プロファイル中のタグ付き要素のデータの取得 Cの宣言: BOOL GetColorProfileElement( HPROFILE hProfile, TAGTYPE Tag, DWORD Offset, PDWORD CopySize, PVOID ElementData, PBOOL Reference); 説明: hProfileで指定した色プロファイル中の、Tagで指定されたタグつき要素のデータを取得 し、ElementDataに結果を格納する。 この関数は98またはNT5.0以降で使用可能。 引数の意味は以下の通り。 hProfile (IN) 取得元の色プロファイルのハンドル。 Tag (IN) どのデータを取得するかを指定するタグ。 Offset (IN) タグつき要素のデータの何バイト目からコピーするかを指定するオフセット 値。 CopySize (IN/OUT) コピーするバイト数。ElementDataにNULLを指定した場合、タグつき 要素のデータサイズが返される。 ElementData (OUT) 取得結果を格納するバッファ。 Reference (OUT) 指定されたタグつき要素のデータを他のタグも参照しているかどうかを 表す真偽値。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○GetColorProfileElementTag プロファイル中のタグ付き要素のタグ名を取得 Cの宣言: BOOL GetColorProfileElementTag( HPROFILE hProfile, DWORD Index, PTAGTYPE Tag); 説明: hProfileで指定したプロファイル中に含まれるタグ付き要素から、Indexで指定したイン デックスに対応するタグつき要素の名前を取得する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfile 取得元のプロファイル。 Index 取得するタグのインデックス。1以上でなければならない。 Tag 取得結果のタグ名。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○GetCountColorProfileElements 色プロファイル中のタグ付き要素の数の取得 Cの宣言: BOOL GetCountColorProfileElements(HPROFILE hProfile, PDWORD ElementNum); 説明: hProfileで指定した色プロファイル中に含まれるタグつき要素の数を取得する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfile 取得元の色プロファイルのハンドル。 ElementNum 取得結果のタグつき要素の数。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○IsColorProfileTagPresent 色プロファイル中のタグの有無の判定 Cの宣言: BOOL IsColorProfileTagPresent( HPROFILE hProfile, TAGTYPE Tag, PBOOL Present); 説明: hProfileで指定した色プロファイル中にTagで指定したタグが存在するかどうか判定する 。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfile 色プロファイルのハンドル Tag 判定するタグ Present 存在するかどうかの判定結果の真偽値。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- プロファイルにタグ付き要素を書き込むには、SetColorProfileElementを使用する。プロ ファイルに、既に存在するタグつき要素のデータを参照する、新しいタグを追加するには 、SetColorProfileElementReferenceを使用する。タグつき要素のデータサイズを変更す るには、SetColorProfileElementSizeを使用する。 ・ポストスクリプトプリンタ ポストスクリプトプリンタの色描画辞書を取得するには、GetPS2ColorRenderingDictiona lyを使用する。ポストスクリプトプリンタの描画意図を取得するには、GetPS2ColorRende ringIntentを使用する。ポストスクリプトプリンタの色空間を取得するには、GetPS2Colo rSpaceArrayを使用する。 ----------------------------------------------------------------------------- ○GetPS2ColorRenderingDictionaly ポストスクリプトの色描画辞書の取得 Cの宣言: BOOL GetPS2ColorRenderingDictionaly( HPROFILE hProfile, DWORD Intent, PBYTE Dictionaly, PDWORD DictionalySize, PBOOL Binaly); 説明: hProfileで指定した色プロファイルからポストスクリプトレベル2の色描画辞書を取得す る。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfile 取得元の色プロファイルのハンドル。 Intent 描画意図を指定するフラグ。後述の表を参照。 Dictionaly 取得結果の色描画辞書のデータを格納するバッファ。 DictionalySize Dictionalyのサイズ。関数の実行に成功した場合、Dictionalyに格納し たデータのサイズが設定される。 Binary Dictionalyに返されたデータがバイナリデータか否かを表す真偽値。FALSEが返さ れた場合、DictionalyにはASCII85エンコーディングされたデータが返されている。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・色変換(Color Transform) 色変換は、複数のプロファイルを連結することで表される。連結されたプロファイル中の 最初のプロファイルと最後のプロファイルはデバイスプロファイルか、色空間プロファイ ルでなければならない。 ある色空間の色を、特定のプロファイルを使用して変換したとする。入力元の色空間を、 入力色空間(Input Color Space)、出力先のプロファイルを出力プロファイル(Output Pro file)と呼ぶ。ICM2.0では、一般に入力色空間が指定されていないときには、sRGB色空間 を入力色空間として使用する。入力色空間とデフォルトのデバイスが指定されているとき には、デバイスに関連付けられているデフォルトの出力プロファイルが使用される。デバ イスに関連付けられているデフォルトの出力プロファイルが存在しないときには、sRGB色 空間が出力色空間(Output Color Space)として使用される。 色変換やカラーマッチングは、デバイスコンテキストを使用せずに行うことも可能である 。この場合、色変換(Color Transform)オブジェクトを作成し、それを利用して種々の作 業を行う。色変換の作成には、CreateColorTransformまたは、CreateMultiProfileTransf ormを使用する。CreateColorTransformは、二つのプロファイルを連結して色変換を作成 する。CreateMultiProfileTransformは、任意の数のプロファイルを連結して色変換を作 成する。作成した色変換は、DeleteColorTransformで削除する。 ----------------------------------------------------------------------------- ○CreateColorTransform 新規色変換を作成 Cの宣言: HTRANSFORM CreateColorTransform( LPLOGCOLORSPACE LogColorSpace, HPROFILE hDestProfile, HPROFILE hTargetProfile, DWORD Flags); 説明: LogColorSpaceで与えられた色空間からhDestProfileで指定された色プロファイルへの新 規色変換を作成する。 この関数は98またはNT5.0で使用可能。 hTargetProfileにNULL以外を指定した場合、作成される色変換は、LogColorSpaceで与え た色空間→hTargetProfileで指定した色プロファイル→hDestProfileで指定した色プロフ ァイル、の順で色変換される。 hTargetProfileを指定した場合、B2Axタグが指定されていなければならない。 引数の意味は、以下の通り。 LogColorSpace 変換の元となる hDestProfile hTargetProfile Flags 作成する色変換のためのフラグ。後述の表を参照。 Flagsの上位16ビットには、以下のフラグのいずれかを指定可能。 ENABLE_GAMUT_CHECKING 作成する色変換をガモットによる判定に用いる。 Flagsの下位16ビットには、以下のフラグのいずれかを指定可能。 PROOF_MODE NORMAL_MODE BEST_MODE 戻り値は、新規に作成した色変換のハンドルである。関数の実行に失敗した場合、NULLが 返される。 ○CreateMultiProfileTransform 複数の色プロファイルにまたがる色変換の作成 Cの宣言: HTRANSFORM CreateMultiProfileTransform( PHROFILE hProfiles, DWORD ProfileNum, PDWORD Intents, DWORD IntentNum, DWORD Flags, DWORD CMMIndex); 説明: hProfilesで指定した色プロファイルのハンドルの配列を元に、色変換を作成する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hProfiles 変換の元となる色プロファイルのハンドルの配列。 ProfileNum hProfilesで指定した配列の要素の数。 Intents hProfilesで指定した各々のプロファイルの使用意図を表す配列。Intents中の各 要素に設定可能な値は後述の表を参照。この配列に要素が1つのみ含まれる場合、初めの 一つのプロファイルのみ指定した使用意図で用いられ、他の全てのプロファイルはINTENT _ABSOLUTE_COLORIMETRICとして解釈される。 IntentNum Intentsで指定した配列の要素の数。 Flags 色変換の為のフラグ。後述の表を参照。 CMMIndex 使用する色管理モジュールを指定するプロファイルのインデックス。INDEX_DON T_CAREを指定した場合、自動的にCMMが選択される。 Intents中の各要素に指定可能なフラグは以下のいずれかの値である。 INTENT_PERCEPTUAL INTENT_SATURATION INTENT_RELATIVE_COLORIMETRIC INTENT_ABSOLUTE_COLORIMETRIC Flagsの上位16ビットには、以下のフラグのいずれかを指定可能。 ENABLE_GAMUT_CHECKING 作成する色変換をガモットによる判定に用いる。 Flagsの下位16ビットには、以下のフラグのいずれかを指定可能。 PROOF_MODE NORMAL_MODE BEST_MODE ○DeleteColorTransform 色変換の削除 Cの宣言: BOOL DeleteColorTransform(HTRANSFORM hTransform); 説明: hTransformで指定された色変換を削除する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hTransform 削除する色変換のハンドル。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- TranslateBitmapBitsを使用すると、ビットマップに対して色変換を行うことができる。 または、TranslateColorsに色の配列を直接渡すことにより、それぞれの色に対して色変 換を行うことができる。変換を行わずに、色変換の出力ガモット中に含まれる色かどうか の判定のみ行いたい場合、CheckBitmapBitsおよびCheckColorsを使用する。CheckBitmapB itsを使用すると、あるビットマップのそれぞれのピクセルの色が、色変換の出力ガモッ ト中に含まれるかどうかを判定することができる。CheckColorsは、色の配列を直接渡し 、これが出力ガモット中に含まれるかどうかを判定する。 ----------------------------------------------------------------------------- ○TranslateBitmapBits ビットマップの色変換 Cの宣言: BOOL TranslateBitmapBits( HTRANSFORM hTransform, PVOID SrcBits, BMFORMAT SrcType, DWORD Width, DWORD Height, DWORD SrcLineBytes, PVOID DestBits, BMFORMAT DestType, DWORD DestLineBytes, PBMCALLBACK TransFunc, ULONG TransFuncParam); 説明: SrcTypeで指定した型のビットマップの色をhTransformで指定した色変換で変換し、DestT ypeで指定した型の色として結果をDestBitsに格納する。 この関数は98またはNT5.0以降で使用可能。 引数の意味は以下の通り。 hTransform (IN) 変換に用いる色変換のハンドル。 SrcBits (IN) ビットマップを表すデータ。 SrcType (IN) SrcBitsをどのように解釈するかを指定するフラグ。 Width (IN) SrcBitsで指定したビットマップの一走査線あたりの有効なピクセルの数。 Height (IN) Bufferで指定したビットマップに含まれる走査線の数。 SrcLineBytes (IN) SrcBitsの一走査線あたりのバイト数。0を指定した場合、走査線のバ イト列はDWORD境界でパディングされているとみなされる。 DestBits (OUT) 変換結果を格納するバッファ。 SrcType (IN) DestBitsにどのような形でビットマップの色を格納するかを指定するフラ グ。 DestLineBytes (IN) DestBitsの一走査線あたりのバイト数。0を指定した場合、走査線の バイト列はDWORD境界でパディングされる。 TransFunc (IN) Bufferの判定中にシステムから繰り返し呼ばれるコールバック関数への ポインタ。呼び出し元は、このコールバック関数を利用して途中経過の表示および中断操 作を実装することができる。 TransFuncParam (IN) CheckFuncで指定したコールバック関数に渡す引数。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○TranslateColors 色変換による色の変換 Cの宣言: BOOL TranslateColors( HTRANSFORM hTransform, PCOLOR SrcColors, DWORD ColorNum, COLORTYPE SrcColorType, PCOLOR DestColors, COLORTYPE DestColorType); 説明: hTransformで指定した色変換を用いて、SrcColorsで指定した配列に含まれる各々の色を 変換し、結果をDestColorsで指定した配列に格納する。 この関数は98またはNT5.0以降で使用可能。 引数の意味は以下の通り。 hTransform 変換に用いる色変換のハンドル。 SrcColors 変換する色の配列。 ColorNUm SrcColorsの要素の数。 SrcColorType SrcColorsの色のタイプ。 DestColors 変換結果の色が格納されるバッファ。 DestColorType どのようなタイプの色に変換するかを指定するフラグ。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○CheckBitmapBits ピクセルの色が色変換の出力ガモット中の色かどうかの判定 Cの宣言: BOOL CheckBitmapBits( HTRANSFORM hTransform, PVOID Buffer, BMFORMAT BufferType, DWORD Width, DWORD Height, DWORD LineBytes, PBYTE Result, PBMCALLBACK CheckFunc, ULONG CheckFuncParam); 説明: Bufferで与えられたビットマップの各々のピクセルの色について、hTransformで指定した 色変換の出力ガモット中に含まれる色かどうかを判定し、それぞれの判定結果をResultに 格納する。 この関数は、98またはNT5.0で使用可能。 判定の結果はResultに返される。バッファに返される値は、一ピクセルにつき、0〜255ま での値を取る、1バイトの値が返される。返された値が0のときは、ガモット中に対応する ピクセルの色が存在することを表す。1以上のときの意味は、ICCプロファイルフォーマッ ト仕様のドキュメントを見よ。 引数の意味は以下の通り。 hTransform (IN) 判定に用いる色変換のハンドル。 Buffer (IN) ビットマップを表すデータ。 BufferType (IN) Bufferをどのように解釈するかを指定するフラグ。 Width (IN) Bufferで指定したビットマップの一走査線あたりの有効なピクセルの数。 Height (IN) Bufferで指定したビットマップに含まれる走査線の数。 LineBytes (IN) 一走査線あたりのバイト数。0を指定した場合、走査線のバイト列はDWOR D境界でパディングされているとみなされる。 Result (OUT) Bufferの判定結果を格納するバッファ。 CheckFunc (IN) Bufferの判定中にシステムから繰り返し呼ばれるコールバック関数への ポインタ。呼び出し元は、このコールバック関数を利用して途中経過の表示および中断操 作を実装することができる。 CHeckFuncParam (IN) CheckFuncで指定したコールバック関数に渡す引数。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ○CheckColors 与えられた色が色変換の出力ガモット中の色かどうかを判定 Cの宣言: BOOL CheckColors( HTRANSFORM hTransform, PCOLOR Colors, DWORD ColorNum, COLORTYPE ColorType, PBYTE Result); 説明: Colorsで指定した色の配列中の各々の色について、hTransformで指定した色変換の出力ガ モット中に含まれるかどうかを判定し、判定結果をResultに出力する。 この関数は98またはNT5.0以降で使用可能。 判定の結果はResultに返される。バッファに返される値は、Colorsの配列の要素一つにつ き、0〜255までの値を取る、1バイトの値が返される。Resultに返された値が0のときは、 ガモット中に指定された色が存在することを表す。1以上のときの意味は、ICCプロファイ ルフォーマット仕様のドキュメントを見よ。 引数の意味は、以下の通り。 hTransform (IN) 色変換のハンドル Colors (IN) 判定する色の配列 ColorNum (IN) Colorsに含まれる要素の数 ColorType (IN) Colorsの解釈の方法を表すフラグ Result (OUT) 判定結果を格納するバッファ。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・色管理モジュール(Color Management Module) ----------------------------------------------------------------------------- ○GetCMMInfo 色管理モジュールの情報の取得 Cの宣言: DWORD GetCMMInfo(HTRANSFORM hTransform, DWORD InfoType); 説明: hTransformで指定した色変換を作成した色管理モジュールの情報を取得する。 この関数は98またはNT5.0で使用可能。 引数の意味は以下の通り。 hTransform 情報を取得する色管理モジュールが作成した色変換のハンドル。 InfoType 取得する情報の種類を表すフラグ。後述の表を参照。 InfoTypeに指定可能なフラグは以下のいずれかである。 CMM_WIN_VERSION 色管理モジュールが動作の前提としているWindowsのバージョン。 CMM_DLL_VERSION 色管理モジュールのバージョン。 CMM_IDENT ICCに登録されている色管理モジュールの識別番号。 戻り値は、取得結果の情報である。情報の取得に失敗した場合、0が返される。 ○SelectCMM 優先的に使用される色管理モジュールの設定 Cの宣言: BOOL SelectCMM(DWORD CMMID); 説明: CMMIDで指定した色管理モジュールを優先的に使用するようにする。 この関数は98またはNT5.0で使用可能である。 引数の意味は以下の通り。 CMMID 優先的に使用する色管理モジュールの、ICCに登録されている識別番号。 戻り値は、関数の実行に成功したか否かを表す真偽値である。 ----------------------------------------------------------------------------- ・描画意図 ICC(International Color Consortium)は、色の描画方法について、以下の四つのものを 定義している。これらを、描画意図(Rendering Intent)とよぶ。 Perceptual Intent イメージの描画時に、イメージの色を出力デバイスのガモットに変換 する際に、白黒のバランスを保つが、色の正確さは保たない。写真やイメージの描画に用 いられる。 Saturation Intent イメージの描画時に、イメージの色を出力デバイスのガモットに変換 する際に、色合いや明るさを保つ。ビジネスでチャートの描画などに用いられる。 Relative Colorimetric Intent Absolute Colorimetric Intent ・