JavaTM 2 Platform
Standard Ed. 5.0

java.awt.color
クラス ICC_ColorSpace

java.lang.Object
  上位を拡張 java.awt.color.ColorSpace
      上位を拡張 java.awt.color.ICC_ColorSpace
すべての実装されたインタフェース:
Serializable

public class ICC_ColorSpace
extends ColorSpace

ICC_ColorSpace クラスは、ColorSpace 抽象クラスの実装です。デバイス非依存およびデバイス依存のカラースペースのこの表現は、International Color Consortium Specification ICC.1:2001-12、File Format for Color Profiles の仕様に基づいています (http://www.color.org を参照)。

通常、Color または ColorModel は、入力、表示、または出力プロファイルのどれかである ICC プロファイルに関連しています (ICC 仕様を参照)。ほかの種類の ICC プロファイルには、たとえば抽象プロファイル、デバイスリンクプロファイル、および名前付きカラープロファイルなどがあり、それらはカラー、イメージ、デバイスなどの、カラースペースを表すのに適切な情報を格納しません (ICC_Profile を参照)。不適切な ICC プロファイルから ICC_ColorSpace オブジェクトを作成しようとするとエラーになります。

ICC プロファイルは、プロファイル (モニターなど) のカラースペースからプロファイル接続領域 (PCS) への変換を表します。イメージまたはカラーにタグ付けするこのプロファイルは、ICC プロファイル形式仕様で定義されている 2 つの特定のデバイス非依存領域 (1 つの CIEXYZ 領域および 2 つの CIELab 領域) のどちらかである PCS を持ちます。ほとんどの場合、このプロファイルは、可逆変換を持つか、両方向の変換を明示的に指定します。PCS からプロファイルのネイティブ領域への変換を要求する方法で ICC_ColorSpace オブジェクトが使われなければならず、その変換を正しく実行するのに不適切なデータがある場合、ICC_ColorSpace オブジェクトは指定された型のカラースペース (TYPE_RGB、TYPE_CMYK など) で出力を生成しますが、出力データの特定のカラー値は定義されません。

このクラスの詳細は、デフォルトのカラースペースで描画するか、既知のカラースペースを持つインポートされたイメージを操作および表示する単純なアプレットでは重要ではありません。そのようなアプレットは、ColorSpace.getInstance() を使ってデフォルトカラースペースの 1 つを取得する必要がある程度です。

関連項目:
ColorSpace, ICC_Profile, 直列化された形式

フィールドの概要
 
クラス java.awt.color.ColorSpace から継承されたフィールド
CS_CIEXYZ, CS_GRAY, CS_LINEAR_RGB, CS_PYCC, CS_sRGB, TYPE_2CLR, TYPE_3CLR, TYPE_4CLR, TYPE_5CLR, TYPE_6CLR, TYPE_7CLR, TYPE_8CLR, TYPE_9CLR, TYPE_ACLR, TYPE_BCLR, TYPE_CCLR, TYPE_CMY, TYPE_CMYK, TYPE_DCLR, TYPE_ECLR, TYPE_FCLR, TYPE_GRAY, TYPE_HLS, TYPE_HSV, TYPE_Lab, TYPE_Luv, TYPE_RGB, TYPE_XYZ, TYPE_YCbCr, TYPE_Yxy
 
コンストラクタの概要
ICC_ColorSpace(ICC_Profile profile)
          ICC_Profile オブジェクトから新しい ICC_ColorSpace を構築します。
 
メソッドの概要
 float[] fromCIEXYZ(float[] colorvalue)
          CS_CIEXYZ 変換カラースペースにあると考えられるカラー値をこの ColorSpace に変換します。
 float[] fromRGB(float[] rgbvalue)
          デフォルトの CS_sRGB カラースペースにあると考えられるカラー値をこの ColorSpace に変換します。
 float getMaxValue(int component)
          指定された成分について、標準化された成分値の最大値を返します。
 float getMinValue(int component)
          指定された成分について、標準化された成分値の最小値を返します。
 ICC_Profile getProfile()
          この ICC_ColorSpace の ICC_Profile を返します。
 float[] toCIEXYZ(float[] colorvalue)
          この ColorSpace にあると考えられるカラー値を CS_CIEXYZ 変換カラースペースに変換します。
 float[] toRGB(float[] colorvalue)
          この ColorSpace にあると考えられるカラー値をデフォルトの CS_sRGB カラースペースの値に変換します。
 
クラス java.awt.color.ColorSpace から継承されたメソッド
getInstance, getName, getNumComponents, getType, isCS_sRGB
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ICC_ColorSpace

public ICC_ColorSpace(ICC_Profile profile)
ICC_Profile オブジェクトから新しい ICC_ColorSpace を構築します。

パラメータ:
profile - 指定された ICC_Profile オブジェクト
例外:
IllegalArgumentException - プロファイルが ColorSpace を表現するのに不適切な場合
メソッドの詳細

getProfile

public ICC_Profile getProfile()
この ICC_ColorSpace の ICC_Profile を返します。

戻り値:
この ICC_ColorSpace の ICC_Profile

toRGB

public float[] toRGB(float[] colorvalue)
この ColorSpace にあると考えられるカラー値をデフォルトの CS_sRGB カラースペースの値に変換します。

このメソッドでは、入力と出力の色がもっとも知覚的に近い色を作成できるように設計されたアルゴリズムを使って、カラー値を変換します。カラー値を比色変換するには、このカラースペースの toCIEXYZ メソッドを使って、最初に入力カラースペースから CS_CIEXYZ カラースペースに変換して、次に CS_sRGB カラースペースの fromCIEXYZ メソッドを使い、CS_CIEXYZ を出力カラースペースに変換します。詳細については toCIEXYZfromCIEXYZ を参照してください。

定義:
クラス ColorSpace 内の toRGB
パラメータ:
colorvalue - この ColorSpace の成分数と少なくとも同じ長さの float 配列
戻り値:
長さが 3 の float 配列
例外:
ArrayIndexOutOfBoundsException - 配列の長さが、この ColorSpace の成分数より小さい場合

fromRGB

public float[] fromRGB(float[] rgbvalue)
デフォルトの CS_sRGB カラースペースにあると考えられるカラー値をこの ColorSpace に変換します。

このメソッドでは、入力と出力の色がもっとも知覚的に近い色を作成できるように設計されたアルゴリズムを使って、カラー値を変換します。カラー値を比色変換するには、CS_sRGB カラースペースの toCIEXYZ メソッドを使って、最初に入力カラースペースを CS_CIEXYZ カラースペースに変換して、次にこのカラースペースの fromCIEXYZ メソッドを使い、CS_CIEXYZ を出力カラースペースに変換します。詳細については toCIEXYZfromCIEXYZ を参照してください。

定義:
クラス ColorSpace 内の fromRGB
パラメータ:
rgbvalue - 少なくとも 3 の長さを持つ float 配列
戻り値:
この ColorSpace の成分数と同じ長さの float 配列
例外:
ArrayIndexOutOfBoundsException - 配列の長さが 3 より小さい場合

toCIEXYZ

public float[] toCIEXYZ(float[] colorvalue)
この ColorSpace にあると考えられるカラー値を CS_CIEXYZ 変換カラースペースに変換します。

このメソッドは、ICC の仕様で定義されている相対色彩測定を使ってカラー値を変換します。すなわち、このメソッドが返す XYZ の値は CS_CIEXYZ カラースペースの D50 白点を基準にして表示されます。この表現は、入力カラースペースから CS_CIEXYZ 領域へ、次に出力カラースペースに変換される、2 ステップのカラー変換処理において便利です。この表現は、指定されたカラー値から色度計を使って測定する XYZ 値と同じではありません。現在 CIE 推奨の計算方法を使って測定されている XYZ 値を計算するには、さらに詳細な変換が必要です。以下のパラグラフでこの内容について詳しく説明します。

ICC 基準では、1 つのデバイスから別のデバイスへ色を変換するための機構として、デバイスに依存しないカラースペース (DICS) を使用します。このアーキテクチャでの色の変換は、転送元デバイスのカラースペースから ICC DICS へ、次にこの ICC DICS から出力先のカラースペースへと行われます。ICC 基準は、デバイスのカラースペースと ICC DICS の間で行われる変換を含むデバイスプロファイルを定義します。転送元デバイスのデバイス対 DICS 変形プロファイルを、出力先デバイスの DICS 対デバイス変形プロファイルに接続して、ソースデバイスの色から出力先デバイスの色へ全体的に変換します。したがって、ICC DICS は共通してプロファイル接続領域 (PCS) と見なされます。toCIEXYZ メソッドと fromCIEXYZ メソッドで使用されるカラースペースは、ICC プロファイル形式仕様が定義する CIEXYZ PCS のことです。これはまた、ColorSpace.CS_CIEXYZ が表現するカラースペースのことと同じです。

色の XYZ 値は、ある白点を基準にしてよく表現されます。XYZ 値の実際の意味は、その値を保持する白点を知らないと理解できません。このことは、相対色度測定として知られています。PCS は D50 の白点を使っているので、PCS の XYZ 値は D50 を基準にしています。たとえば、PCS の白点が D50 を基準にした XYZ 値を持つとすると、X=.9642、Y=1.000、Z=0.8249 になるように定義されます。この白点は、グラフィックアートのアプリケーションで共通して使用されますが、他のアプリケーションでは、この白点以外のものがしばしば使用されます。

プリンタやモニタなどのデバイスの色の特性を定量化するために、特定のデバイスの色に XYZ 値の測定値を一般化しています。つまり、デバイス XYZ の値という用語は、現在の CIE 推奨計算を使用しているデバイスを測定した XYZ 値を示すのに使用されているということです。

デバイス XYZ 値と PCS XYZ 値との間で変換すると、CIE 比色値によって表現されている、デバイスのカラースペースと PCS 間での変換に対応したこのメソッドで返されます。この処理にはさまざまな要因がありますが、その中にはあまり重要でないものもあります。もっとも重要なものは、デバイスの白点と PCS の白点との違いを処理するのに行われる調整です。これを行う数多くの技術があり、現在の研究のテーマとして論争が行われています。共通して使用されるメソッドには、XYZ スケーリング、von Kries 変換、および Bradford 変換などがあります。適切なメソッドはアプリケーションごとに異なります。

もっとも簡単なメソッドは、XYZ スケーリングです。このメソッドでは、すべての XYZ デバイス値は PCS XYZ 値に変換されます。PCS 白点 (D50) の該当デバイスの白点に対する比率を XYZ デバイス値に乗算して変換します。


 
 Xd、Yd、Zd は、デバイス XYZ の値
 Xdw、Ydw、Zdw は、デバイス XYZ の白点の値
 Xp、Yp、Zp は、PCS XYZ の値
 Xd50、Yd50、Zd50 は、PCS XYZ の白点の値
 
 Xp = Xd * (Xd50 / Xdw)
 Yp = Yd * (Yd50 / Ydw)
 Zp = Zd * (Zd50 / Zdw)
 
 

PCS からデバイスへの変換はこれらの式を逆転して行います。


 
 Xd = Xp * (Xdw / Xd50)
 Yd = Yp * (Ydw / Yd50)
 Zd = Zp * (Zdw / Zd50)
 
 

ICC プロファイル形式使用のメディア白点タグは、デバイス白点と同じではありません。メディア白点タグは、PCS 値で表示され、光源の下で測定される場合に、デバイス光源の XYZ とデバイスメディアの XYZ の違いを表示するのに使用されます。デバイス白点は、そのデバイスで表示される白点に対応するデバイス XYZ 値として表示されます。たとえば、RGB カラー (1.0, 1.0, 1.0) を sRGB デバイスで表示すると、デバイス XYZ の測定値は D65 となります。これは、sRGB デバイスの ICC プロファイル形式で表すメディア白点タグの XYZ 値と同じではありません。

定義:
クラス ColorSpace 内の toCIEXYZ
パラメータ:
colorvalue - この ColorSpace の成分数と少なくとも同じ長さの float 配列
戻り値:
長さが 3 の float 配列
例外:
ArrayIndexOutOfBoundsException - 配列の長さが、この ColorSpace の成分数より小さい場合

fromCIEXYZ

public float[] fromCIEXYZ(float[] colorvalue)
CS_CIEXYZ 変換カラースペースにあると考えられるカラー値をこの ColorSpace に変換します。

このメソッドは、ICC 仕様で定義されている相対色度測定を使ってカラー値を変換します。すなわち、このメソッドがとる XYZ の引数値は CS_CIEXYZ カラースペースの D50 白点を基準にして表示されます。この表現は、入力カラースペースから CS_CIEXYZ 領域へ、次に出力カラースペースに変換される、2 ステップのカラー変換処理において便利です。このメソッドが返すカラー値は、色度計で測定するときにメソッドに渡される XYZ 値を生成するカラー値ではありません。現在 CIE 推奨の計算方法を使った測定値に対応する XYZ 値を計算済みの場合は、その値がこのメソッドに渡される前に D50 相対値に変換する必要があります。以下のパラグラフでこの内容について詳しく説明します。

ICC 基準では、1 つのデバイスから別のデバイスへ色を変換するための機構として、デバイスに依存しないカラースペース (DICS) を使用します。このアーキテクチャでの色の変換は、転送元デバイスのカラースペースから ICC DICS へ、次にこの ICC DICS から出力先のカラースペースへと行われます。ICC 基準は、デバイスのカラースペースと ICC DICS の間で行われる変換を含むデバイスプロファイルを定義します。転送元デバイスのデバイス対 DICS 変形プロファイルを、出力先デバイスの DICS 対デバイス変形プロファイルに接続して、ソースデバイスの色から出力先デバイスの色へ全体的に変換します。したがって、ICC DICS は共通してプロファイル接続領域 (PCS) と見なされます。toCIEXYZ メソッドと fromCIEXYZ メソッドで使用されるカラースペースは、ICC プロファイル形式仕様が定義する CIEXYZ PCS のことです。これはまた、ColorSpace.CS_CIEXYZ が表現するカラースペースと同じです。

色の XYZ 値は、ある白点を基準にしてよく表現されます。XYZ 値の実際の意味は、その値を保持する白点を知らないと理解できません。このことは、相対色度測定として知られています。PCS は D50 の白点を使っているので、PCS の XYZ 値は D50 を基準にしています。たとえば、PCS の白点が D50 を基準にした XYZ 値を持つとすると、X=.9642、Y=1.000、Z=0.8249 になるように定義されます。この白点は、グラフィックアートのアプリケーションで共通して使用されますが、他のアプリケーションでは、この白点以外のものがしばしば使用されます。

プリンタやモニタなどのデバイスの色の特性を定量化するために、特定のデバイスの色に XYZ 値の測定値を一般化しています。つまり、デバイス XYZ の値という用語は、現在の CIE 推奨計算を使用しているデバイスを測定した XYZ 値を示すのに使用されているということです。

デバイス XYZ 値と、このメソッドが引数としてとる PCS XYZ 値との間で変換すると、CIE 比色値によって表現されている、デバイスのカラースペースと PCS 間での変換に対応します。この処理にはさまざまな要因がありますが、その中にはあまり重要でないものもあります。もっとも重要なものは、デバイスの白点と PCS の白点との違いを処理するのに行われる調整です。これを行う数多くの技術があり、現在の研究のテーマとして論争が行われています。共通して使用されるメソッドには、XYZ スケーリング、von Kries 変換、および Bradford 変換などがあります。適切なメソッドはアプリケーションごとに異なります。

もっとも簡単なメソッドは、XYZ スケーリングです。このメソッドでは、すべての XYZ デバイス値は PCS XYZ 値に変換されます。PCS 白点 (D50) の該当デバイスの白点に対する比率を XYZ デバイス値に乗算して変換します。


 
 Xd、Yd、Zd は、デバイス XYZ の値
 Xdw、Ydw、Zdw は、デバイス XYZ の白点の値
 Xp、Yp、Zp は、PCS XYZ の値
 Xd50、Yd50、Zd50 は、PCS XYZ の白点の値
 
 Xp = Xd * (Xd50 / Xdw)
 Yp = Yd * (Yd50 / Ydw)
 Zp = Zd * (Zd50 / Zdw)
 
 

PCS からデバイスへの変換はこれらの式を逆転して行います。


 
 Xd = Xp * (Xdw / Xd50)
 Yd = Yp * (Ydw / Yd50)
 Zd = Zp * (Zdw / Zd50)
 
 

ICC プロファイル形式使用のメディア白点タグは、デバイス白点と同じではありません。メディア白点タグは、PCS 値で表示され、光源の下で測定される場合に、デバイス光源の XYZ とデバイスメディアの XYZ の違いを表示するのに使用されます。デバイス白点は、そのデバイスで表示される白点に対応するデバイス XYZ 値として表示されます。たとえば、RGB カラー (1.0, 1.0, 1.0) を sRGB デバイスで表示すると、デバイス XYZ の測定値は D65 となります。これは、sRGB デバイスの ICC プロファイル形式で表すメディア白点タグの XYZ 値と同じではありません。

定義:
クラス ColorSpace 内の fromCIEXYZ
パラメータ:
colorvalue - 少なくとも 3 の長さを持つ float 配列
戻り値:
この ColorSpace の成分数と同じ長さの float 配列
例外:
ArrayIndexOutOfBoundsException - 配列の長さが 3 より小さい場合

getMinValue

public float getMinValue(int component)
指定された成分について、標準化された成分値の最小値を返します。TYPE_XYZ 領域の場合は、すべての成分に対して 0.0 という最小値を返します。TYPE_Lab 領域の場合は、L 成分に対しては 0.0、a および b 成分に対しては -128.0 を返します。これは、ICC 仕様の XYZ および Lab プロファイル接続領域の符号化と一致しています。ほかのすべての型については、すべての成分に対して 0.0 を返します。ICC_ColorSpace を使用するときに、別の最小成分値が必要とするプロファイルを使用する場合は、このクラスをサブクラス化し、このメソッドをオーバーライドする必要があります。

オーバーライド:
クラス ColorSpace 内の getMinValue
パラメータ:
component - 成分インデックス
戻り値:
標準化された成分値の最小値
例外:
IllegalArgumentException - 成分が 0 より小さいか、numComponents - 1 より大きい場合
導入されたバージョン:
1.4

getMaxValue

public float getMaxValue(int component)
指定された成分について、標準化された成分値の最大値を返します。TYPE_XYZ 領域の場合は、すべての成分に対して 1.0 という最大値を返します。TYPE_Lab 領域の場合は、L 成分に対しては 100.0、a および b 成分に対しては 127.0 を返します。これは、ICC 仕様の XYZ および Lab プロファイル接続領域の符号化と一致しています。ほかのすべての型については、すべての成分に対して 1.0 を返します。ICC_ColorSpace を使用するときに、別の最大成分値を必要とするプロファイルを使用する場合は、このクラスをサブクラス化し、このメソッドをオーバーライドする必要があります。

オーバーライド:
クラス ColorSpace 内の getMaxValue
パラメータ:
component - 成分インデックス
戻り値:
標準化された成分値の最大値
例外:
IllegalArgumentException - 成分が 0 より小さいか、numComponents - 1 より大きい場合
導入されたバージョン:
1.4

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。