Chapter 6 Color Management Functions

色管理関数

それぞれのXウィンドウは常に関連づけられたカラーマップ を持っている。 provides a level of indirection between pixel values and colors displayed on the screen. カラーマップはスクリーン上に表示される色とピクセル値の間の間接レベル を提供する。 Xlibはカラーマップを操作するのに使う関数を提供する。 XプロトコルはRGB色空間で値に使っている色を定義する。 RGB色空間はデバイス依存である。 異なる出力デバイスにRGB値を表示することは結果的に異なる色を出力 することになる。 Xlibはデバイスによらず、一貫した結果のためにデバイス独立な色空間を使用して、 色を指定する手段をクライアントに提供する。 XlibはCIE XYZ色空間から導かれるデバイス独立な色空間をサポートする。 This includes the CIE XYZ, xyY, L*u*v*, and L*a*b* color spaces as well as the TekHVC color space. これはTekHVC色空間と同様にCIE XYZ, xyY, L*u*v, L*a*b色空間を含む。

この章は以下のようなことを述べる。

プレフィクス"Xcms"を持つこの章の全ての関数、型、シンボルは <X11/Xcms.h >で定義される。 保持している関数と型は <X11/Xlib.h >で定義される。

この章での関数はスクリーン上でにおける色の表示を操作する。 ピクセルがウィンドウ内で取ることができる値に対しては カラーマップ内のカラーセルにある。 例えば、 ウィンドウが4bitの深さである場合、0から15までのピクセル値が定義される。 カラーマップはカラーセルの集合である。 カラーセルは赤、緑、青(RGB)値の3つから成る。 ハードウェアはこれらの値にビット数における重大な制限を課す。 それぞれのピクセルはディスプレイメモリーに読み出され、ピクセル はカラーマップに内に調べあげられる。 セルのRGB値はどのような色がスクリーンに表示されるかを決定する。 白黒モニターを持つグレイスケールディスプレイでの 値はスクリーン上の輝度を決定するのに組み合わされる。

典型的に、アプリケーションはカラーセルを割り当てたり、希望する色を得るために カラーセルをセットする。 クライアントは読みだし専用セルを割り当てる。 その場合に、これらの色に対するピクセル値は複数のアプリケーション間で共有され、 セルのRGB値は変化させられない。 クライアントが読み書き可能なセルを割り当てた場合、 クライアントに単独に所有され、 ピクセル値に関連づけられた色が任意に変化させられる。 セルは希望する色を得るためにクライアントにより(読み書き可能なら、RGB値に初期化され) 関連づけられなけらばならない。 割り当てられていないセルにピクセル値を使用することは結果として 定義されていない色を生じる。

カラーマップはウィンドウに関連づけられているので、Xは複数のカラーマップ そして、実際には異なる種類のカラーマップを使って、ディスプレイをサポートする。 ディスプレイ中のカラーマップリソースが不十分な場合、 ウィンドウがTrue Colorで表示しようとすると、他のウィンドウは 不正確な色で表示される。 一つ以上のカラーマップがアプリケーションが使用しているカラーリソースに 対して要求された場合、ウィンドウマネージャーはどのウィンドウがTrue Colorで 表示されるべきかを制御する。 どんな場合も、スクリーンにインストールされているカラーマップのセットがある。 インストールされているカラーマップのいずれかを使っているウィンドウはがrue Colorで表示する 時、他のカラーマップを使っているウィンドウは通常不正確な色で表示される。 XInstallColormap, XUninstallColormap を使うことによりインストールされているカラーマップのセットを制御できる。

カラーマップは特定のスクリーンにローカルなものである。 スクリーンは常にデフォルトのカラーマップを持ち、 プログラムは典型的にこのカラーマップの外にセルを割り当る。 一般的に、カラーリソースを独占するアプリケーションを 書くべきではない。 ハードウェアの中には一度にインストールされる複数のカラーマップをサポートする ものもあるが、ディスプレイを構成している多くのハードウェアは今日、単一のインストール されているカラーマップをサポートする。だからプリミティブはアプリケーション間で カラーマップエントリーを共有することを推奨するように書かれている。

マクロ DefaultColormap はデフォルトのカラーマップを返す。 マクロ DefaultVisual は指定したスクリーンのデフォルトのビジュアルタイプを返す。 ビジュアルタイプは StaticGray , GrayScale , StaticColor ,PseudoColor , TrueColor , DirectColor のいずれかである (3.1節を参照)。

Color Structures

RGB色空間の値を操作する関数は XColor構造体を使う。この構造体は次のもの を含む。

typedef struct {
	unsigned long pixel;	/* ピクセル値 */ 
	unsigned short red, green, blue;	/* RGB値 */ 
	char flags;	/* DoRed, DoGreen, DoBlue */	
	char pad;
} XColor;

赤、緑、青の値はディスプレイのハードウェアに実際に使われるビット数とは独立 したものを含めて、0から65535までの範囲にある。 サーバはハードウェアに使われる範囲にこれらのデータを縮小する。 黒は(0,0,0)で表示され、 白は(65535,65535,65535)で表示される。 関数の中には、 メンバー flags はメンバー red,green,blueのいずれを使うかを DoRed ,DoGreen ,DoBlue と論理和を取ることで制御しているものある。

全ての色空間の値を操作する関数は XcmsColor構造体を使う。 この構造体は共有のサブ構造体を含み、 それぞれは特定の色空間に対する表色エンコーディングをサポートする。 XColor構造体のように XcmsColor構造体はピクセルと表色情報( XcmsColor構造体におけるメンバーspec) を含む。

typedef unsigned long XcmsColorFormat;			/* 色の指定フォーマット *//* Color Specification Format */
typedef struct {
	union {
		XcmsRGB RGB;
		XcmsRGBi RGBi;
		XcmsCIEXYZ CIEXYZ;
		XcmsCIEuvY CIEuvY;
		XcmsCIExyY CIExyY;
		XcmsCIELab CIELab;
		XcmsCIELuv CIELuv;
		XcmsTekHVC TekHVC;
		XcmsPad Pad;
	} spec;
	unsigned long pixel;
	XcmsColorFormat format;
} XcmsColor;			/* Xcms 色構造体 */ 

表色は様々な色空間に対してエンコードされるので、 メンバーspec に対するエンコーディングはメンバーformatと同一視される。 メンバー formatは XcmsColorFormat .の型を持つ。 次のマクロは標準的なフォーマットを定義する。

#define XcmsUndefinedFormat 0x00000000
#define XcmsCIEXYZFormat 0x00000001 /* CIE XYZ */
#define XcmsCIEuvYFormat 0x00000002 /* CIE u'v'Y */
#define XcmsCIExyYFormat 0x00000003 /* CIE xyY */
#define XcmsCIELabFormat 0x00000004 /* CIE L*a*b* */
#define XcmsCIELuvFormat 0x00000005 /* CIE L*u*v* */
#define XcmsTekHVCFormat 0x00000006 /* TekHVC */
#define XcmsRGBFormat 0x80000000 /* RGB Device */
#define XcmsRGBiFormat 0x80000001 /* RGB 強度 */

デバイス非依存な色空間に対するフォーマットは 32ビット目によりデバイス依存な空間に対するこれらものとは区別される。 このビットがセットされた場合、 表色はデバイス依存な形式であることを示す。 そうでない場合、デバイス非依存なな形式である。 31ビット目がセットされた場合、 これは色空間が実行時にXlibに追加されることを示している。 (6.12.4節を参照) 実行時に追加される色空間に対するフォーマット値はプログラムが実行されるその時々 によって異なる。 その色空間への参照がクライアントの外側で行われる場合、 (例えば、ファイルに表色を格納する場合) 参照は色空間の文字プレフィクスにより行われる。 ( XcmsFormatOfPrefix, XcmsPrefixOfFormat を参照すること)

様々な色空間に対する表色エンコーディングを示すデータタイプは 次のように定義される。

typedef double XcmsFloat;
typedef struct {
	unsigned short red;	/* 0x0000 〜 0xffff * / 
	unsigned short green;	/* 0x0000 〜 0xffff * / 
	unsigned short blue;	/* 0x0000 〜 0xffff * / 
} XcmsRGB;		/* RGB デバイス */ 

typedef struct {
	XcmsFloat red;	/* 0.0 〜 1.0 */ 
	XcmsFloat green;	/* 0.0 〜 1.0 */ 
	XcmsFloat blue;	/* 0.0 〜 1.0 */ 
} XcmsRGBi;		/* RGB 強度 */ 

typedef struct {
	XcmsFloat X;
	XcmsFloat Y;	/* 0.0 〜 1.0 */ 
	XcmsFloat Z;
} XcmsCIEXYZ;		/* CIE XYZ */

typedef struct {
	XcmsFloat u_prime;	/* 0.0 〜 ~0.6 */ 
	XcmsFloat v_prime;	/* 0.0 〜 ~0.6 */ 
	XcmsFloat Y; 	/* 0.0 〜 1.0 */ 
} XcmsCIEuvY;		/* CIE u'v'Y */

typedef struct {
	XcmsFloat x; 	/* 0.0 〜 ~.75 */ 
	XcmsFloat y; 	/* 0.0 〜 ~.85 */ 
	XcmsFloat Y; 	/* 0.0 〜 1.0 */ /"0 /* 0.0 to 1.0 */
} XcmsCIExyY;		/* CIE xyY */

typedef struct {
	XcmsFloat L_star; 	/* 0.0 〜 100.0 */ 
	XcmsFloat a_star;
	XcmsFloat b_star;
} XcmsCIELab;		/* CIE L*a*b* */

typedef struct {
	XcmsFloat L_star; 	/* 0.0 〜 100.0 */ 
	XcmsFloat u_star;
	XcmsFloat v_star;
} XcmsCIELuv;		/* CIE L*u*v* */

typedef struct {
	XcmsFloat H; 	/* 0.0 〜 360.0 */ 
	XcmsFloat V; 	/* 0.0 〜 100.0 */ 
	XcmsFloat C; 	/* 0.0 〜 100.0 */ 
} XcmsTekHVC;		/* TekHVC */

typedef struct {
	XcmsFloat pad0;
	XcmsFloat pad1;
	XcmsFloat pad2;
	XcmsFloat pad3;
} XcmsPad;		/* 4の倍数 */ 

与えられたデバイス独立なフォーマットは次のような表色を許す。:

RGBの強度値はガンマ補正された値でないことに注意することは重要である。 コントラストにおいて、 表色を変換した結果として生成されるRGBのデバイス値は 常にガンマ補正されている。そして カラーマップを問い合わせた結果として取得された、もしくはクライアントにより 渡されるRGBデバイス値はガンマ縫製されたものとXlibに仮定される。 マニュアルにおける用語RGB 値はRGBデバイス値を示している。

Color Strings

Xlibは色に対して文字列名を使う機構を提供する。 色文字列は抽象的な色の名前か数字的な色の指定のどちかを含む。 色文字列は場合に応じて変わるものである。

色文字列は次の関数に使われる。

Xlibは抽象的な色の名前、例えば、赤や青などの使用をサポートする。 この抽象名に対する値は1つまたはそれ以上の色の名前のデータベースを 探すことにより得られる。 Xlibはまず0個以上のクライアントデータベースを探す。 これらのデータベースの数、位置、内容は実装依存であり、 現在のロケ-ルに依存する。 名前が見つけられなければ、XlibはXサーバのデータベースの中で色を探す。 色の名前がホストポータブル文字エンコーディングでないなら、 その結果は実装依存である。

数字で示される色の指定は色空間の名前と以下のの表記法に従う値の組で構成される。

<color_space_name>:<value>/.../<value>

次は有効な色の文字列の例である。

"CIEXYZ:0.3227/0.28133/0.2493"
"RGBi:1.0/0.0/0.0"
"rgb:00/ff/00"
"CIELuv:50.0/0.0/0.0"
数字で示される指定の表記法と記号は次の節でそれぞれ標準的な 色空間に与えられる。

RGB Device String Specification

RGBデバイス指定はプレフィクス"rgb"により識別され、以下で示す 表記に従う。

rgb:<red>/<green>/<blue>
    <red>, <green>, <blue> := h | hh | hhh | hhhh
    h := 16進数1桁 (大文字、小文字は関係ない) 

hは4bitの値、 hhは8bitの値、 hhhは12bitの値、 hhhhは16bitの値をそれぞれ示す。

典型的な例が文字列"rgb:ea/75/52" や "rgb:ccc/320/320" である。 しかし、16進数の混合文字列 (``rgb:ff/a5/0'' and ``rgb:ccc/32/0'') も許される。

過去との互換性のために RGB デバイスの古い記法もサポートされているが、 これを使うことは勧められない。 記法は以下のフォーマットのいずれかであり、先頭のシャープ記号(#)の後に 数の指定を続けたものである。

#RGB	(4 bits each)
#RRGGBB	(8 bits each)
#RRRGGGBBB	(12 bits each)
#RRRRGGGGBBBB	(16 bits each)

R, G, B は16進数の1桁を表す。 RGBの各値に16ビットより小さい値が指定されたときは、 これは値の最大桁を表す(スケールが変えられる ``rgb:'' の記法と異なる)。 例えば、文字列 "#3a7"は"#3000a0007000"と同じである。

RGB Intensity String Specification

RGB 強度の指定はプレフィックス ``rgbi:'' で認識され、 以下の記法に従う。

rgbi:<red>/<green>/<blue>

red, green, blue の値は 0.0 以上 1.0 以下の 浮動小数点の値である。 a string of numbers possibly containing a decimal point, and an optional exponent field containing an E or e followed by a possibly signed integer string. これらの入力フォーマットは、符号(無くてもよい)、 数値を表す文字列(小数点を含んでも良い)、 符号付き整数を伴う E あるいは e からなる 指数部分(無くてもよい)で構成される。

Device-Independent String Specifications

標準的なデバイス非依存の文字列指定の記法を以下に示す。

CIEXYZ:<X>/<Y>/<Z>
CIEuvY:<u>/<v>/<Y>
CIExyY:<x>/<y>/<Y>
CIELab:<L>/<a>/<b>
CIELuv:<L>/<u>/<v>
TekHVC:<H>/<V>/<C>

全ての値 (C, H, V, X, Y, Z, a, b, u, v, y, x) は 浮動小数点値である。 これらの値の記法は、正あるいは負の符号(無くてもよい)、 数字を表す文字列 (小数点を含んでよい)、 ``E'' か ``e'' の後に正か負の符号(これは無くてもよい) と数字を表す文字列を続けた対数部分(無くてもよい) から構成される。

Color Conversion Contexts and Gamut Mapping

Xlibはデバイス非依存な表色をデバイ依存な指定に変換したり、 その逆を行う時、 it uses knowledge about the color limitations of the screen hardware. スクリーンハードウェアの色の限界についての知識を使う。 この情報は典型的にデバイスプロファイルと呼ばれ、 色変換コンテキスト(CCC)で利用可能である。

指定した色はターゲットスクリーンのガモットカラーの外側にあったり、 表色に関連する白色点はスクリーンに固有の白色点とは異なる。 Xlibはある条件に出くわした時に、全域マッピングを適用する。

ガモットを処理する方法はCCCにコールバックとして格納され、 次々にCCCは色空間の変換ルーチンに使われる。 クライアントのデータもそれぞれのコールバックでのCCCに蓄えられる。 CCCもクライアントが表色に関係していると仮定している白色点を含んでいる (それはクライアントの白色点である)。 クライアントはをクライアントの白色点と同様にガモット処理するコールバックや クライアントデータを指定する。 Xlibによりクライアントが他の形式のガモット処理を行わないようにする。 (例えば、ガーモット拡張) しかし、Xlibは白色の調整やガモット圧縮以外の他のガーモット処理に関する 直接的なサポートを提供しない

それぞれのカラーマップに関係してるものはXlibにより生成される初期の透過的なCCCである。 それゆえ、 Xlib関数への引き数としてカラーマップを指定する時、 間接的にCCCを指定していることになる。 それぞれのスクリーンに関係づけられているデフォルトのCCCがある。 新しく作られたCCCはデフォルトのCCCの属性を引き継ぐ。 だから、デフォルトのCCC属性は新しいCCCに影響するように変更される。

ガモットマッピングが起きるXcms関数は Status を返し、以下の関数により定義された特定のstatus値を持つ。

Creating, Copying, and Destroying Colormaps

スクリーンに対するカラーマップを作成するには、 XCreateColormap を使う。

Colormap XCreateColormap(display, w, visual, alloc)
Display *display;
Window w;
Visual *visual;
int alloc;
display
X サーバへの接続を指定。
w
カラーマップを作るスクリーンに属するウィンドウを指定。
visual
スクリーンがサポートしているビジュアルのタイプを指定。 スクリーンがサポートしてないビジュアルの場合、エラー BadMatchとなる。
alloc
アロケートされるカラーマップのエントリーを指定。 AllocNoneAllocAll を渡すことができる。

関数 XCreateColormapは、指定したウィンドウがあるスクリーンに対して、指定したタイプのビジュアルの カラーマップを生成し、これに対応するカラーマップの ID を返す。 指定したウィンドウはスクリーンを決定するためだけに使われる点に注意せよ。

ビジュアルクラス GrayScale ,PseudoColor ,DirectColor に対しては、カラーマップエントリーの初期値は未定義である。 StaticGray ,StaticColor ,TrueColor に対しては、エントリーは定義済みの値を持つが、 これらの値はビジュアルに依存するもので、X によっては定義されない。 StaticGray ,StaticColor ,TrueColor ,に対しては、引き数 alloc は AllocNone でなければならず、そうでない場合にはエラー BadMatchとなる。 これら以外のビジュアルクラスにおいて alloc が AllocNone ,ならば、カラーマップには初期値としてアロケートされている エントリーは存在せず、 クライアントによってアロケートすることが可能である。 ビジュアルのタイプについての情報は、3.1 章を 参照すること。

引き数 alloc が AllocAll の場合、 カラーマップ全体は書き込み可能でアロケートされる。 アロケートされたエントリーの初期値は未定義である。 GrayScalePseudoColor を指定すると、 XAllocColorCellsの呼び出しが 0 から N - 1 までの全てのピクセル値返した 場合と同じ効果になる。 ここで N は指定したビジュアルのカラーマップエントリーの値である。 DirectColor を指定すると、 XAllocColorPlanes呼び出しが 0, red_mask, green_mask, blue_mask の ピクセル値を返した場合と同じ効果になる。 後者の3つは、指定したビジュアルにおいて それぞれ対応するマスクと同じ値を持つ。 しかし全ての場合において、 これらのエントリーのいずれも XFreeColors で解放することはできない。

XCreateColormapはエラー BadAlloc ,BadMatch ,BadValue ,BadWindow を起こすことがある。

リソースを使い果たしため、前に共有されているカラーマップ越える割り当てが 失敗したときに新しいカラーマップを作るには、 XCopyColormapAndFree を使う。

Colormap XCopyColormapAndFree(display, colormap)
Display *display;
Colormap colormap;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。

関数 XCopyColormapAndFreeは指定されたカラーマップとビジュアルタイプが同じで、また対象とするスクリーン 上も同じであるようなカラーマップを生成し、新しいカラーマップのID を返す。 この関数はまた、クライアントが現在アロケートしているエントリーの全てを、 指定したカラーマップから新しいカラーマップに移動させる。 この時は色の値、リードオンリーか書き込み可能であるかの属性は変化せず、 指定したカラーマップのエントリーは解放される。 新しいカラーマップの他のエントリーにおける色の値は未定義である。 指定したカラーマップが、 alloc を AllocAll としてクライアントで生成されていた場合、 新しいカラーマップも AllocAll で生成され、 全てのエントリーに対する全ての色の値は指定したカラーマップからコピーされ、 そして指定したカラーマップは解放される。 指定したカラーマップが、クライアントで AllocAll として生成されていなかった場合には、 移動されるピクセルとプレーンは以下の関数を用いてクライアントで割り当てられ、 それ以降解放されていないものである: XAllocColor ,XAllocNamedColor ,XAllocColorCells ,XAllocColorPlanes

XCopyColormapAndFreeはエラー BadAlloc ,BadColor を起こすことがある。

カラーマップを破棄するには、 XFreeColormap を使う。

XFreeColormap(display, colormap)
Display *display;
Colormap colormap;
display
X サーバへの接続を指定。
colormap
破棄を行うカラーマップを指定。

関数 XFreeColormapはカラーマップリソースIDとカラーマップの関連づけを削除し、 カラーマップのメモリを解放する。 しかし、この関数はスクリーンのデフォルトのカラーマップには無効である。 指定したカラーマップがスクリーンにインストールされたカラーマップの場合、 この関数はこれをアンインストールする( XUninstallColormap を参照)。 指定したカラーマップが( XCreateWindow ,XSetWindowColormap ,XChangeWindowAttributes によって)あるウィンドウのカラーマップとして定義されている 場合には、 XFreeColormapはウィンドウに関連付けられたカラーマップを None に変更し、 ColormapNotifyイベントを生成する。 X は None のカラーマップを使ってウィンドウに表示される色については定義していない。

XFreeColormapはエラー BadColor を起こすことがある。 色の名前を値に割り当てる。

Mapping Color Names to Values

色の名前をRGB値にマップするには、 XLookupColor を使う。

Status XLookupColor(display, colormap, color_name, exact_def_return, screen_def_return)
Display *display;
Colormap colormap;
char *color_name;
XColor *exact_def_return, *screen_def_return;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color_name
色の名前を表す文字列(例えば red)を指定。この文字列に 対応する色定義の構造体が返される。
exact_def_return
正確な RGB 値が返される。
screen_def_return
ハードウェアが提供する最も近い RGB 値が返される。

関数 XLookupColorは指定したカラーマップに対応するスクリーンで色の名前を調べる。 この関数は指定したカラーマップのタイプについて、正確な色の値と スクリーンが提供する最も近い値の両方を返す。 色の名前のエンコーディングがホストポータブル文字エンコーディング でない場合の結果は実装依存である。 大文字や小文字の使用は問題ない。 XLookupColor色の名前が解決できればゼロでない値を返し、 そうでない場合はゼロを返す。

XLookupColorはエラー BadColor を起こすことがある。

色の名前を正確なRGB値にマップするには、 XParseColor を使う。

Status XParseColor(display, colormap, spec, exact_def_return)
Display *display;
Colormap colormap;
char *spec;
XColor *exact_def_return;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
spec
色の名前を表す文字列を指定。 大文字か小文字かは関係ない。
exact_def_return
後で利用できる正確な RGB 値が返される。また、フラグ DoRed ,DoGreen ,DoBlueをセットする。

関数 XParseColorは指定したカラーマップに対応するスクリーンに関して色の名前を調べる。 この関数は正確な色の値を返す。 色の名前のエンコーディングがホストポータブル文字エンコーディングでなかった場合、 実行結果は実装依存である。 大文字や小文字の使用は問題ない。 XParseColorは色の解決ができればゼロでない値を返し、 できなければゼロを返す。

XParseColorはエラー BadColor を起こすことがある。

任意の色空間において色の名前を値にマップするには、 XcmsLookupColor を使う。

Status XcmsLookupColor(display, colormap, color_string, color_exact_return, color_screen_return,
result_format)
Display *display;
Colormap colormap;
char *color_string;
XcmsColor *color_exact_return, *color_screen_return;
XcmsColorFormat result_format;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color_string
色文字列を指定。
color_exact_return
色文字列から展開された表色や、色名データベースで見つかった 対応する文字列から展開された表色が返される。
color_screen_return
スクリーン上で複写することができる色が返される。
result_format
返される表色(引き数 color_screen_return と color_exact_return arguments) に対する色のフォーマットを指定。 フォーマットが XcmsUndefinedFormatであり、色文字列が数値で表される表色の場合、 表色はその数値形式の表色で用いられるフォーマットで返される。 フォーマットが XcmsUndefinedFormatであり、色文字列が色の名前を含む場合、 表色はデータベースに色を格納するために用いられる フォーマットで返される。

関数 XcmsLookupColorは、指定したカラーマップに関連するスクリーンについて、 色名の文字列を使った検索を行う。 この関数は正確な色の値と、指定したカラーマップのビジュアルタイプに 関してスクリーンが提供する最も近い値の両方を返す。 値は、引き数 result_format で指定したフォーマットで返される。 色の名前のエンコーディングがホストポータブル文字エンコーディングでない場合、 結果は実装依存である。 大文字でも小文字でも結果は同じである。 XcmsLookupColorは、名前を解決することができれば XcmsSuccessまたは XcmsSuccessWithCompressionを返す。 そうでない場合には XcmsFailure を返す。 XcmsSuccessWithCompressionが返された場合、color_screen_return に返される表色は ガモット圧縮した結果である。

Allocating and Freeing Color Cells

カラーセルを割り当てるには2つの方法がある。 一度に1つのピクセル値を明示的に読み出し専用としてエントリーするか、 読み書き用としてエントリーするかである。 ここで、多くのカラーセルやプレーンを同時に割り当てる事ができる。 読み出し専用セルはサーバによりセットされたRGB値を持つ。 読み書き用セルは初期化時に定義された色を持たない。 次の節で示された関数はセルに値を蓄えるのに使われなければならない。 全てのクライアントは他のクライアントにより割り当てられた読み書き用セルに 値を蓄えることが出きるが、 読み出し専用セルは通常、そのセルを割り当てたクライアントにプライベイトなものである と考えられる。

読み出し専用カラーマップセルはクライアント間で共有される。 サーバはクライアントによるセルの割り当てや解放を数える。 最後のクライアントが共有化セルを解放したとき、セルは最後に割り当てを解除される。 単一のクライアントが同じ読み出し専用セルを何度も割り当てた場合、 サーバはその割り当てを最初の一回は数えず、その後数える。

RGB値に読み出し専用のカラーセルを割り当てるには、 XAllocColor を使う。

Status XAllocColor(display, colormap, screen_in_out)
Display *display;
Colormap colormap;
XColor *screen_in_out;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
screen_in_out
カラーマップで実際に使用される値を指定。あるいは、 カラーマップで実際に使用される値が返される。

関数 XAllocColorはハードウェアにサポートされている中から最も近い RGB 値に対応するリードオンリー のカラーマップエントリーをアロケートする。 XAllocColorは、ハードウェアがサポートしている、指定した RGB 要素に最も近い色のピクセル値と、 実際に使用される RGB 値を返す。 対応するカラーマップセルは読み出し専用である。 また、 XAllocColorは成功時にはゼロでない値を返し、失敗時にはゼロを返す。 同じ実効 RGB 値を求めた複数のクライアントには、同一の読み出し専用の エントリーが割り当てられるので、クライアント間でエントリーを共有することができる。 最後のクライアントが共有しているセルを解放した時、このセルは実際に解放される。 XAllocColorXColor構造体の flags メンバは使用しないし、値の変更もしない。

XAllocColorはエラー BadColor を起こすことがある。

任意のフォーマットで読み出し専用カラーセルを割り当てるには、 XcmsAllocColor を使う。

Status XcmsAllocColor(display, colormap, color_in_out, result_format)
Display *display;
Colormap colormap;
XcmsColor *color_in_out;
XcmsColorFormat result_format;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color_in_out
アロケートする色を指定し、カラーマップ中で実際に使用されるピクセルと 色が返される。
result_format
返される表色に対する色のフォーマットを指定。

関数 XcmsAllocColorXAllocColorと似ているが、 任意のフォーマットを指定できる点が異なる。 関数 XcmsAllocColorは、指定した色を持つリードオンリーのカラーセル(カラーマップのエントリー) をアロケートするため、最終的には XAllocColorを呼び出す。 XcmsAllocColorは、まず指定された色を RGB 値に変換し、次にこの RGB 値を XAllocColor に渡す。 XcmsAllocColorは、実際にアロケートされたカラーセルのピクセル値と表色をを返す。 返された表色は、 XAllocColor が返したRGB 値を引き数 result_format で指定したフォーマットに変換した 結果である。 返される表色は不要な場合、 result_format に XcmsRGBFormat をセットしていれば、不要な計算を回避することができる。 これに対応するカラーマップセルは読み出し専用である。 この関数が XcmsFailure を返した場合、 表色 color_in_out は変更されない。

XcmsAllocColorは、エラー BadColorを起こすことがある。

色と使って読み出し専用カラーセルを割り当て、RGBフォーマットでハードウェアにより サポートされる最も近い色を返すには、 XAllocNamedColor を使う。

Status XAllocNamedColor(display, colormap, color_name, screen_def_return, exact_def_return)
Display *display;
Colormap colormap;
char *color_name;
XColor *screen_def_return, *exact_def_return;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color_name
色定義の構造体を得たい色の名前を示す文字列(例えば red)を指定。
screen_def_return
ハードウェアで提供される最も近い RGB 値が返される。
exact_def_return
正確な RGB 値を指定。

関数 XAllocNamedColorは指定したカラーマップに対応するスクリーンのおいて、 名前が付けられている色を問い合わせる。 この関数はデータベースでの正確な定義とスクリーンがサポートしている 最も近い色との両方を返す。 割り当てられるカラーセルは読み出し専用である。 ピクセル値は screen_def_return に返される。 色の名前のエンコーディングがホストポータブル文字エンコーディングでない場合、 結果は実装依存である。 大文字と小文字のいずれを使っても結果は同じである。 screen_def_return と exact_def_return が同じ構造体を指している場合、 pixel フィールドは正しく設定されるが、 色の値は未定義である。 XAllocNamedColorはセルがアロケートされた場合にゼロでない値を返し、 そうでなければゼロを返す。

XAllocNamedColorはエラー BadColorを起こすことがある。

色名を使って読み出し専用カラーセルを割り当て、任意のフォーマットでハードウェア によりサポートされる最も近い色を返すには、 XcmsAllocNamedColor を使う。

Status XcmsAllocNamedColor(display, colormap, color_string, color_screen_return, color_exact_return,
result_format)
Display *display;
Colormap colormap;
char *color_string;
XcmsColor *color_screen_return;
XcmsColor *color_exact_return;
XcmsColorFormat result_format;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color_string
色文字列を指定。\ これに対する色定義構造体が返される。
color_screen_return
カラーセルのピクセル値と、そのセルに実際に格納される表色が返される。
color_exact_return
色の名前から展開した表色か、色名データベースで見つかった対応する文字列から 展開した色指定が返される。
result_format
返される表色(引数 color_screen_return と color_exact_return)に対する 色のフォーマットを指定。 フォーマットが XcmsUndefinedFormatであり、色文字列が数値で表される表色の場合、 表色はその数値形式の表色で用いられるフォーマットで返される。 フォーマットが XcmsUndefinedFormatであり、色文字列が色の名前を含む場合、 表色はデータベースに色を格納するために用いられるフォーマットで返される。

関数 XcmsAllocNamedColorXAllocNamedColorに似ているが、返される色のフォーマットを任意に指定できる点が異なる。 この関数は、色名文字列で指定した色を持つリードオンリーの カラーセルをアロケートするため、最終的には XAllocColorを呼ぶ。 色名文字列は XcmsColor構造体( XcmsLookupColor を参照)に展開され、RGB値に変換され、最後に XAllocColor に渡される。 色の名前のエンコーディングがホストポータブル文字エンコーディングでない場合、 結果は実装依存である。 大文字を使っても小文字を使っても結果は変わらない。

この関数は、展開の結果としての表色(正確な表色)と実際に格納される表色 (スクリーン表色)の両方を返す。 このスクリーン表色は、 XAllocColorが返すRGB値を result_format で指定したフォーマットに変換した 結果である。 表色が必要ない場合には、result_format に XcmsRGBFormat をセットすることで、不要な計算を回避することができる。 color_screen_return と color_exact_return が同じ構造体を指している場合、 pixel フィールドは正しく指定されるが、 色の値は未定義となる。

XcmsAllocNamedColorはエラー BadColorを起こすことがある。

PseudoColorモデルに対する読み書き用カラーセルとカラープレインの組み合わせを 割り当てるには、 XAllocColorCells を使う。

Status XAllocColorCells(display, colormap, contig, plane_masks_return, nplanes,
pixels_return, npixels)
Display *display;
Colormap colormap;
Bool contig;
unsigned long plane_masks_return[];
unsigned int nplanes;
unsigned long pixels_return[];
unsigned int npixels;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
contig
プレーンが連続でなければならないかどうかを示す真偽値を指定。
plane_mask_return
プレーンマスクの配列が返される。
nplanes
プレーンマスクの配列に返されるプレーンマスクの数を指定。
pixels_return
ピクセル値の配列が返される。
npixels
pixels_returnの配列で返されるピクセル値の数を指定。

関数 XAllocColorCellsは読み書き可能なカラーセルを割り当てる。 色の数は正の値でなければならず、プレーンの数はゼロ以上でなければならない。 そうでない場合は BadValueエラーとなる。 ncolors と nplanes が要求された場合、 ncolors 個のピクセルと nplane 個のプレーンマスクが返される。 あるマスクが、他のマスクやピクセルと、1にセットされたビットを 共有することはない。 各ピクセルと0個以上のマスクとの論理和を取ることによって、 ncolors * %2 sup nplanes% 個の別々のピクセルを作ることができる。 これらの全ては、リクエストによって書き換えることができるように 割り当てられる。 GrayScalePseudoColor に対しては、 各マスクはちょうど1ビットを持ち、これらは全て1にセットされる。 DirectColor に対しては、 各マスクはちょうど3ビットを持ち、これらはすべて1にセットされる。 True が True であり、全てのマスクの論理和が取られている場合には、 1にセットされている連続しているビットの集まり1つが GrayScalePseudoColor に対して作られ、1にセットされている3組の連続したビットの集まり (各pixel サブフィールド内に1つ)が DirectColor に対して作られる。 割り当てられたエントリーの RGB 値は未定義である。 XAllocColorCellsは成功時にはゼロでない値を返し、失敗時にはゼロを返す。

XAllocColorCellsはエラー BadColor, BadValue を起こすことがある。

DirectColorモデルに対する読み書き用のカラーリソースを割り当てるには、 XAllocColorPlanes を使う。

Status XAllocColorPlanes(display, colormap, contig, pixels_return, ncolors, nreds, ngreens,
nblues, rmask_return, gmask_return, bmask_return)
Display *display;
Colormap colormap;
Bool contig;
unsigned long pixels_return[];
int ncolors;
int nreds, ngreens, nblues;
unsigned long *rmask_return, *gmask_return, *bmask_return;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
contig
プレーンが連続でなければならないかどうかを示す真偽値を指定。
pixels_return
ピクセル値の配列が返される。 XAllocColorPlanesはこの配列でのピクセル値を返す。
ncolors
配列 pixels_return に返されるピクセル値の数を指定。
nreds

ngreens

nblues

R, G, B のプレーンの数を指定。 この値は負であってはならない。
rmask_return

gmask_return

bmask_return
R, G, B プレーンに対するプレーンマスクが返される。

指定する ncolors は正の値で無ければならず、nreds, ngreens, nblues はゼロ以上でなければならない。 そうでない場合には、エラー BadValueとなる。 ncolors 個の色、nreds 個の赤、ngreeens 個の緑、nblues 個の青が要求された場合、 ncolors 個のピクセルが返される。 また、マスク内では ngreens 個、 nreds 個、nblues 個のビットが それぞれ1にセットされる。 contig が True ならば、 各マスクは1にセットされた連続なビットの集合となる。 あるマスクが、他のマスクやピクセルと、1にセットされたビットを 共有することはない。 DirectColor に対しては、 各マスクは対応するピクセルサブフィールド内に置かれる。 マスクのサブセットと各ピクセル値の論理和を取ることによって、 ncolors * %2 sup (nreds+ngreens+nblues)% 個の個別のピクセル値を作ることができる。 これらの全てはリクエストによって割り当てられる。 しかし、カラーマップ内には ncolors * %2 sup nreds% 個の独立の red エントリーと ncolors * %2 sup ngreens% 個の独立の green エントリーと ncolors * %2 sup blues% 個の独立の blue エントリーしかない。 これは PseudoColor であっても同じである。 ピクセル値のカラーマップエントリーが( XStoreColors ,XStoreColor ,XStoreNamedColor ),の使用により)変更された時、 ピクセルはマスクに従って分解され、 対応する独立したエントリーが更新される。 XAllocColorPlanesは成功時にはゼロでない値を返し、失敗時にはゼロを返す。

XAllocColorPlanesはエラー BadColor, BadValue を返すことがある。

XFreeColors .

XFreeColors(display, colormap, pixels, npixels, planes)
Display *display;
Colormap colormap;
unsigned long pixels[];
int npixels;
unsigned long planes;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
pixels
指定したカラーマップにセルをマップするピクセル値の配列を指定。
npixels
ピクセルの数を指定。
planes
解放するプレーンを指定。

関数 XFreeColorsは、セルの解放を行う。解放されるセルは、その値が pixels 配列に存在している ピクセルで表されているものである。 引き数 planes は、いずれのピクセルとも1にセットされたビットを 共有してはならない。 全てのピクセルの集合は、この引き数 planes のサブセットとピクセルの 論理和を取ることで作ることができる。 このリクエストは( XAllocColor , XAllocNamedColor ,XAllocColorCells ,XAllocColorPlanes を使用して) クライアントによってアロケートされた これらのピクセルを全て解放する。 XAllocColorPlanes で得た個別のピクセルを解放しても、 実際には関係するピクセルも全て解放されるまで、 それらのピクセルは再利用できないことに注意せよ。 同様に、 読み出し専用のエントリーは全てのクライアントから解放されるまでは実際に解放されない。 また、クライアントが同じ読み出せ専用のエントリーを複数回割り当てた場合は、 エントリーが解放されるまでに何度も解放を行わなければならない。

1つ以上のピクセルがエラーとなっていても、指定したピクセルでクライアントに よってカラーマップ内にアロケートされたものは全て解放される。 指定したピクセルがカラーマップへの有効なインデックスでなかった場合には、 エラー BadValue となる。 指定したピクセルが、そのクライアントによって割り当てられていない (つまり、割り当てられていないか、別のクライアントによってのみ割り当てられる) 場合や、 カラーマップの全てのエントリーが書き込み可能で作られている( AllocAllXCreateColormap を渡している)場合には、 エラー BadAccessとなる。 複数のピクセルがエラーの場合、 エラーが通知されるピクセルはどれかわからない。

XFreeColorsはエラー BadAccess ,BadColor ,BadValue を起こすことがある。

Modifying and Querying Colormap Cells

単一のカラーマップセルにRGB値を記憶させるには、 XStoreColor を使う。

XStoreColor(display, colormap, color)
Display *display;
Colormap colormap;
XColor *color;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color
格納される色定義のための構造体の配列を指定。

関数 XStoreColorXColor構造体の pixel メンバで指定されているピクセル値のカラーマップエントリを 変更する。 この値は XColor構造体の pixel メンバに指定する。 このピクセル値は読み書き可能なセルで、 カラーマップ内の正しいインデックスでなければならない。 指定したピクセルがカラーマップ内の正しいインデックスでなければ、 エラー BadValueとなる。 XStoreColorは色のRGB成分も変更する。 XColor 構造体の flags メンバに DoRed ,DoGreen ,DoBlueを指定することにより、 どの色成分を変更するか指定する。 カラーマップがスクリーンにインストールされていれば、 変更は即座に画面に反映される。

XStoreColorはエラー BadAccess ,BadColor ,BadValue を起こすことがある。

複数のカラーマップセルに複数のRGB値を格納させるには、 XStoreColors を使う。

XStoreColors(display, colormap, color, ncolors)
Display *display;
Colormap colormap;
XColor color[];
int ncolors;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color
格納される色定義のための構造体の配列を指定。
ncolors
色定義の構造体の数を指定。 色定義のための配列内の XColor構造体の数を指定。

関数 XStoreColorsXColor構造体の pixel メンバで指定されているピクセル値のカラーマップエントリー を変更する。 XColor 構造体の flag メンバに DoRed, DoGreen, DoBlue をセットすることで、どの色成分を変更するか指定する。 カラーマップがスクリーンにインストールされていれば、 変更は即座に表示に反映される。 XStoreColors はピクセルが書き込み可能でカラーマップに割り当てられていれば、 1つ以上のピクセルでエラーになっても、 指定したピクセルを変更する。 指定したピクセルがカラーマップの正しいインデックスでない場合には、 BadValueエラーとなる。 指定したピクセルが割り当てられていないか、 リードオンリーで割り当てられている場合には、 BadAccessエラーとなる。 1つ以上のピクセルがエラーになった場合、 エラーとして報告されるピクセルは任意である。

XStoreColorsはエラー BadAccess ,BadColor ,BadValue を起こすことがある。

単一のカラーマップセルに任意のフォーマットのカラーを格納するには、 XcmsStoreColor を使う。

Status XcmsStoreColor(display, colormap, color)
Display *display;
Colormap colormap;
XcmsColor *color;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color
格納するカラーセルと色を指定。 この XcmsColor構造体で指定される値は、返される時にも 変更されていない。

関数 XcmsStoreColorは、 XcmsColor構造体で指定された色を RGB 値に変換する。 その後、この関数は3つのフラグ ( DoRed, DoGreen, DoBlue) がセットされている XColor 構造体の RGB 表色を用いて XStoreColor を呼び出し、 XcmsColor 構造体の pixel メンバで指定されたカラーセルを変更する。 このピクセル値は指定したカラーマップに対する有効なインデックスでなければならない。 また、ピクセル値によって指定されるカラーセルは読み書き可能なセルでなければならない。 ピクセル値が有効なインデックスでない場合は、エラー BadValueとなる。 カラーセルが割り当てられていないか、読み出し専用で割り当てられている場合は、 エラー BadAccessとなる。 カラーマップがそのスクリーンにインストールされていれば、 変更は即座に画面表示に反映される。

XStoreColorは返し値を持たないことに注意せよ。 したがって、この関数が返す XcmsSuccessは、RGB 値への変換が成功し、 XStoreColorの呼び出した行われたことだけを示す。 実際に格納された色を取得するには、 XcmsQueryColor を使用すること。 スクリーンのハードウェアの制限やガモット圧縮のため、 カラーマップに格納された色は指定した色と異なることがある。

XcmsStoreColorは、エラー BadAccess ,BadColor ,BadValueを起こすことがある。

複数のカラーマップセルに任意のフォーマットを持つ複数の色を格納するには、 XcmsStoreColors を使う。

Status XcmsStoreColors(display, colormap, colors, ncolors, compression_flags_return)
Display *display;
Colormap colormap;
XcmsColor colors[];
int ncolors;
Bool compression_flags_return[];
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
colors
表色である XcmsColor構造体の配列を指定。 配列のそれぞれの要素は、カラーセルとそのセルに格納される色を指定する。 配列で指定した値は、返される時にも変更されない。
ncolors
表色の配列内の XcmsColor構造体の数を指定。
compression_flags_return
圧縮の状態を示す Boolean 値の配列が返される。 NULL でない値が与えられた場合、 対応する色が圧縮されていれば配列の各要素には Trueがセットされ、そうでなければ Falseがセットされる。 圧縮の状態が不要であれば、NULL を指定すること。

関数 XcmsStoreColorsは、 XcmsColor構造体の配列で指定された色を RGB 値に変換する。 XColorその後、この関数は3つのフラグ (DoRed, DoGreen, DoBlue) がセットされている XColor 構造体の RGB 表色を用いて XStoreColors を呼び出し、対応する XcmsColor 構造体の pixel メンバで指定されたカラーセルを変更する。 このピクセル値は指定したカラーマップに対する有効なインデックスでなければならない。 また、ピクセル値によって指定されるカラーセルは読み書き可能なセルでなければならない。 ピクセル値が有効なインデックスでない場合は、 エラー BadValueとなる。 カラーセルがアロケートされていないか、リードオンリーでアロケートされている場合は、 エラー BadAccessなる。 1つ以上のピクセルでエラーになった場合、 1つのピクセルに対してエラーが通知されるが、 どのピクセルになるかはわからない。 カラーマップがそのスクリーンにインストールされていれば、 変更は即座に画面表示に反映される。

XStoreColorsは返し値を持たないことに注意せよ。 したがって、この関数が返す XcmsSuccessは、RGB 値への変換が成功し、 XStoreColorsの呼び出した行われたことだけを示す。 際に格納された色を取得するには、 XcmsQueryColors を使用すること。 スクリーンのハードウェアの制限やガモット圧縮のため、 カラーマップに格納された色は指定した色と異なることがある。

XcmsStoreColorsは、エラー BadAccess ,BadColor ,BadValueを起こすことがある。

ある一つのカラーマップセル内で名前を使って指定した色を格納するには XStoreNamedColorを使う。

XStoreNamedColor(display, colormap, color, pixel, flags)
Display *display;
Colormap colormap;
char *color;
unsigned long pixel;
int flags;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color
ピクセルと RGB 値か、色の名前を表す文字列(例えば red)を指定。
pixel
カラーマップ内のエントリーを指定。
flags
RGB成分のどれがセットされるかを指定。

関数 XStoreNamedColorはカラーマップに対応するスクリーンについて名前で指定された色を問い合わせ、 その結果を指定したカラーマップに格納する。 引き数 pixel はカラーマップ内のエントリーを決定する。 引き数 flags は、RGB成分のどれがセットされるかを決定する。 このメンバはビット DoRed , DoGreen , DoBlue について、ビット単位の論理和をとることでセットできる。 色の名前のエンコーディングがホストポータブル文字エンコーディングでない場合、 実行結果は実装依存となる。 大文字を使用しても小文字を使用しても結果は同じである。 指定したピクセルがカラーマップの正しいインデックスでない場合はエラー BadValueとなる。 指定したピクセルがアロケートされていないか、リードオンリーでアロケートされている 場合には、 BadAccessエラーとなる。

XStoreNamedColorはエラー BadAccess ,BadColor ,BadName ,BadValue を起こすことがある。

関数 XQueryColor ,XQueryColorsXColor構造体のピクセル数でのピクセル値を取る。 指定したカラーマップからこれらのピクセルに対するRGB値を構造体に 格納する。 割り当てられていないエントリーに返される値は定義されていない。 これらの関数も全て3つの色に XColor構造体にフラグメンバーをセットする。 ピクセルが指定したカラーマップに有効なインデックスではない場合、 エラー BadValueが起きる。 1つより多くのピクセルがエラーになった場合、 通知されるエラーはどれかわからない。

単一のカラーマップセルのRGB値を調べるには、 XQueryColor を使う。

XQueryColor(display, colormap, def_in_out)
Display *display;
Colormap colormap;
XColor *def_in_out;
display
X サーバへの接続を指定。
colormap
Specifies the colormap. カラーマップを指定。
def_in_out
構造体で指定されているピクセルに対する RGB 値を指定、また、その RGB 値が返される。

関数 XQueryColorXColor構造体内のピクセルの現在の RGB 値を返し、また、 フラグ DoRed ,DoGreen ,DoBlueをセットする。

XQueryColorはエラー BadColor,BadValue を起こすことがある。

複数のカラーマップセルのRGBを調べるには、 XQueryColors を使う。

XQueryColors(display, colormap, defs_in_out, ncolors)
Display *display;
Colormap colormap;
XColor defs_in_out[];
int ncolors;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
defs_in_out
構造体で指定されているピクセルに対する色定義の構造体の配列を指定、また、 その配列が返される。
ncolors
色定義の構造体の配列内の XColor構造体の数を返す。

関数 XQueryColorsXColor構造体それぞれのピクセルに対する RGB 値を返し、 構造体それぞれの DoRed ,DoGreen ,DoBlueフラグをセットする。

XQueryColorsはエラー BadColor, BadValue を起こすことがある。

任意のフォーマットで単一のカラーマップセルの色を問い合わせるには、 XcmsQueryColor を使う。

Status XcmsQueryColor(display, colormap, color_in_out, result_format)
Display *display;
Colormap colormap;
XcmsColor *color_in_out;
XcmsColorFormat result_format;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
color_in_out
問い合わせるカラーセルを示す pixel メンバを指定。 カラーセルに格納される表色は、この XcmsColor構造体に返される。
result_format
返される表色に対する色のフォーマットを指定。

関数 XcmsQueryColorは、指定した XcmsColor構造体の pixel メンバのピクセル値に対する RGB 値を取得し、 この値を result_format で指定された目的フォーマットに変換する。 ピクセル値が指定したカラーマップ内の有効なインデックスでない場合は、 エラー BadValueとなる。

XcmsQueryColorは、エラー BadColor, BadValueを起こすことがある。

任意のフォーマットで複数のカラーマップセルの色を問い合わせるには、 XcmsQueryColors を使う。

Status XcmsQueryColors(display, colormap, colors_in_out, ncolors, result_format)
Display *display;
Colormap colormap;
XcmsColor colors_in_out[];
unsigned int ncolors;
XcmsColorFormat result_format;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
colors_in_out
問い合わせるカラーセルを示すそれぞれのpixelメンバー、 XcmsColorstructures, each pixel member indicating the color cell to query. 構造体の配列を指定。 カラーセルに対する表色がこれらの構造体に返される。
ncolors
表色の配列内の XcmsColor構造体の数を指定。
result_format
返される表色に対する色のフォーマットを指定。

関数 XcmsQueryColorsは、複数の XcmsColor構造体の pixel メンバのピクセル値に対する RGB 値を取得し、 この値を引き数 result_formt で指定された目的フォーマット に変更する。 ピクセル値が指定したカラーマップ内の有効なインデックスでない場合は、 エラー BadValueとなる。 1つより多くのピクセルがエラーになった場合、 通知されるエラーはどれかわからない。

XcmsQueryColorsは、エラー BadColor, BadValueを起こすことがある。

Color Conversion Context Functions

この節は色変換コンテキスト(CCCs)の作成、変更、 問い合わせをするための関数を示す。

それぞれのカラーマップに関係してるものがXlibにより暗黙に生成される 初期のCCCである。 それゆえ、関数の引数としてカラーマップを指定したとき、 直接的にCCCを指定していることになる。 Xクライアントにより変更できるCCCの属性は次のものがある。

これらの属性の初期値は特定の実装による。 その後、生成されるCCCに対するCCCの属性はデフォルトのCCCのCCC属性を 変更することにより定義される。 それぞれのスクリーンに関連付けられたデフォルトCCCがある。

Getting and Setting the Color Conversion Context of a Colormap

カラーマップに関連付けられたCCCを得るには、 XcmsCCCOfColormap を使う。

XcmsCCC XcmsCCCOfColormap(display, colormap)
Display *display;
Colormap colormap;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。

関数 XcmsCCCOfColormapは、指定したカラーマップに対応する CCC を返す。 一度取得した後は、CCC 属性は問い合わせや修正が可能である。 指定したカラーマップに対応する CCC 属性が XcmsSetCCCOfColormap によって変化していなければ、 この CCC は指定されたカラーマップが色の関数の引き数に使われたときに 使用される。

カラーマップに関連付けられたCCCを変更するには、 XcmsSetCCCOfColormap を使う。

XcmsCCC XcmsSetCCCOfColormap(display, colormap, ccc)
Display *display;
Colormap colormap;
XcmsCCC ccc;
display
X サーバへの接続を指定。
colormap
カラーマップを指定。
ccc
CCC を指定。

関数 XcmsSetCCCOfColormapは、指定したカラーマップに対応する CCC を変更する。 この関数は、以前にカラーマップに対応づけられた CCC を返す。 アプリケーションで再びこの CCC を使わない場合は、 XcmsFreeCCC を呼び出して CCC を解放すべきである。 複数のカラーマップは、同じ CCC を制約なしに共有することができる。 これは、Xlib がそれぞれのカラーマップを使って生成したものを含む。 しかし、 Xlib は新しいカラーマップを使って、新しい CCC を作る。

Obtaining the Default Color Conversion Context

デフォルトCCCのCCC属性を変更することにより その後作成されるCCCに対するデフォルトCCC属性を変更 できる。 デフォルトCCCはそれぞれのスクリーンに関連付けられる。

スクリーンに対するデフォルトCCCを得るには、 XcmsDefaultCCC を使う。

XcmsCCC XcmsDefaultCCC(display, screen_number)
Display *display;
int screen_number;
display
X サーバへの接続を指定。
screen_number
ホストサーバ上の適切なスクリーン番号を指定。

関数 XcmsDefaultCCCは、指定したスクリーンに対するデフォルトの CCC を返す。 そのビジュアルはスクリーンのデフォルトのビジュアルである。 初期化時のガモット圧縮手続きと白色点調整手続きと これに対応するクライアントデータは、実装依存である。

Color Conversion Context Macros

アプリケーションは直接的に XcmsCCC のどんな部分も変更すべきではない。 次のリストはC言語のマクロであり、これに相当する関数は 他の言語とのバインディングに使われる。またこれらは何らかの データを返す。

DisplayOfCCC(ccc)
XcmsCCC ccc;

Display *XcmsDisplayOfCCC(ccc)
XcmsCCC ccc;

ccc
CCC を指定。

両方とも指定したCCCに対応するディスプレイを返す。

VisualOfCCC(ccc)
XcmsCCC ccc;

Visual *XcmsVisualOfCCC(ccc)
XcmsCCC ccc;

ccc
Specifies the CCC. CCC を指定。

両方とも指定したCCCに対応するビジュアルを返す。

ScreenNumberOfCCC(ccc)
XcmsCCC ccc;

int XcmsScreenNumberOfCCC(ccc)
XcmsCCC ccc;

ccc
Specifies the CCC. CCC を指定。

両方とも指定したCCCに対応するスクリーンの数を返す。

ScreenWhitePointOfCCC(ccc)
XcmsCCC ccc;

XcmsColor *XcmsScreenWhitePointOfCCC(ccc)
XcmsCCC ccc;

ccc
CCC を指定。

両方とも指定したCCCに対応するスクリーンの白色点を返す。

ClientWhitePointOfCCC(ccc)
XcmsCCC ccc;

XcmsColor *XcmsClientWhitePointOfCCC(ccc)
XcmsCCC ccc;

ccc
CCC を指定。

両方とも指定したCCCのクライアントの白色点を返す。

Modifying Attributes of a Color Conversion Context

CCCにおけるクライアントの白色点をセットするには、 XcmsSetWhitePoint を使う。

Status XcmsSetWhitePoint(ccc, color)
XcmsCCC ccc;
XcmsColor *color;
ccc
CCC を指定。
color
新しいクライアントの白色点を指定。

関数 XcmsSetWhitePointは、指定した CCC のクライアント白色点を変更する。 pixel メンバは無視され、表色は返される際にも 変更されないままである点に注意すること。 新しい白色点のフォーマットは、 XcmsCIEXYZFormat ,XcmsCIEuvYFormat ,XcmsCIExyYFormat ,XcmsUndefinedFormat のいずれかでなければならない。 引き数 color が NULL ならば、この関数はクライアント白色点の指定の format コンポーネントに XcmsUndefinedFormat ,をセットする。これは、クライアント白色点がスクリーン白色点と 同じであると想定することを示す。

新しい白色点に対するフォーマットが正しければ、 この関数はゼロでないステータスを返す。 そうでない場合には、ゼロを返す。

ガモット圧縮の関数とそれに相当するクライアントデータをセットするには、 XcmsSetCompressionProc を使う。

XcmsCompressionProc XcmsSetCompressionProc(ccc, compression_proc, client_data)
XcmsCCC ccc;
XcmsCompressionProc compression_proc;
XPointer client_data;
ccc
CCCを指定。
compression_proc
色がスクリーンの色のガモットを越えているとき、 適用されるガモット圧縮関数を指定。 NULLが指定され、このCCCを使っている関数が 表色をデバイス依存の形式に変換し、かつスクリーンの色のガモットを超えている色に 出くわした場合、 この関数は XcmsFailure を返す。
client_data
ガモット圧縮関数もしくはNULLに対するクライアントデータを指定。

関数 XcmsSetCompressionProc新しく指定した関数とクライアントデータを使って指定したCCCに ガモット圧縮関数とクライアントデータをセットし、 古い関数を返す。

指定したCCCにおける白色点調整の手続きとそれに相当するクライアントデータを セットするには、 XcmsSetWhiteAdjustProc を使う。

XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc(ccc, white_adjust_proc, client_data)
XcmsCCC ccc;
XcmsWhiteAdjustProc white_adjust_proc;
XPointer client_data;
ccc
CCC を指定。
white_adjust_proc
白色点調整関数を指定。
client_data
白色点調整関数もくしくはNULLに対するクライアントデータを指定。

関数 XcmsSetWhiteAdjustProcは 2つの動作を行う。すなわち、まず、指定した CCC の白色点調整関数とクライアントデータに、 新しく指定した関数とクライアントデータをセットし、 次に古い関数を返す。

Creating and Freeing a Color Conversion Context

XcmsCreateCCC を呼び出すことによりアプリケーション内にCCCを明示的に作ることができる。 これらの作られたCCCはCCC引き数を明示的に必要とするこれらの関数に 使われる。 アプリケーションにより使われなくなった古いCCCは XcmsFreeCCC を使って解放されるべきである。

CCCを作成するには、 XcmsCreateCCC を使う。

XcmsCCC XcmsCreateCCC(display, screen_number, visual, client_white_point, compression_proc,
compression_client_data, white_adjust_proc, white_adjust_client_data)
Display *display;
int screen_number;
Visual *visual;
XcmsColor *client_white_point;
XcmsCompressionProc compression_proc;
XPointer compression_client_data;
XcmsWhiteAdjustProc white_adjust_proc;
XPointer white_adjust_client_data;
display
X サーバへの接続を指定。
screen_number
ホストサーバ上の適切なスクリーン番号を指定。
visual
ビジュアルのタイプを指定。
client_white_point
クライアント白色点を指定。 NULL を指定した場合には、 クライアント白色点はスクリーン白色点と同じと想定される。 pixel メンバは無視される。
compression_proc
色がスクリーンの色再現域の外側にあるときに適用されるガモット圧縮の手続きを指定。 NULL が指定され、この CCC を使う関数が色使用をデバイス依存のフォーマットに 変更しなければならず、スクリーンの色再現域の外側にある色に出会った場合、 この関数は XcmsFailure を返す。
compression_client_data
ガモット圧縮の手続きで使われるクライアントのデータか、NULL を指定。
white_adjust_proc
クライアント白色点がスクリーン白色点と異なるときに 適用される白色点調整手続きを指定。 NULL を指定すると、白色点調整は行われない。
white_adjust_client_data
白色点調整の手続きに使うクライアントデータ、あるいは NULL を指定する。

関数 XcmsCreateCCCは、指定したディスプレイ、スクリーン、ビジュアルに対する CCC を生成する。

CCCを解放するには、 XcmsFreeCCC を使う。

void XcmsFreeCCC(ccc)
XcmsCCC ccc;
ccc
CCCを指定。

関数 XcmsFreeCCCは、指定した CCC に使われているメモリを解放する。 デフォルトの CCC と、現在カラーマップに関連づけられている CCC は 無視される。

Converting between Color Spaces

任意のカラーフォーマットにおける表色の配列を 単一の目的のフォーマットに変換するには、 XcmsConvertColors を使う。

Status XcmsConvertColors(ccc, colors_in_out, ncolors, target_format, compression_flags_return)
XcmsCCC ccc;
XcmsColor colors_in_out[];
unsigned int ncolors;
XcmsColorFormat target_format;
Bool compression_flags_return[];
ccc
CCC を指定。 デバイス独立な色空間だけの間の変換では(例えば、TekHVC から CIELuv への変換)、 CCC はクライアント白色点だけを指定すればよい。
colors_in_out
表色の配列を指定。 pixel メンバは無視され、返される時にも変更されない。
ncolors
表色の配列内の XcmsColor構造体の数を指定。
target_format
対象とする表色のフォーマットを指定する。
compression_flags_return
圧縮の状態を示す真偽値(Boolean 型)の配列が返される。 NULL でないポインタが与えられた場合、 配列の各要素には対し、対応する色が圧縮されていれば Trueがセットされ、そうでなければ Falseがセットされる。 圧縮の状態が不要であれば NULL を渡すこと。

関数 XcmsConvertColorsは指定した CCC を用い、指定した XcmsColor構造体の配列に含まれる表色を、現在のフォーマットから1つ の対象のフォーマットに変換する。 返し値が XcmsFailure ,の場合、表色の配列の内容は変化しない。

配列内では複数の表色のフォーマットが混在することがある (例えば、3 つの CIE XYZ と 2 つの CIE Luv 等)。 配列がデバイス独立の表色とデバイス依存の表色を含み、 引き数 target_format がデバイス依存のフォーマット(例えば、 XcmsRGBiFormat ,XcmsRGBFormat )を指定している場合、 全ての表色は CIE XYZ フォーマットに変換され、 その後で目的のデバイス依存フォーマットに変換される。

Callback Functions

この節はガモット圧縮と白色点調整コールバックを示す。

表色を XcmsCIEXYZからデバイス依存のフォーマット(典型的に、 XcmsRGBi )に変換しようとしたときに 生じた色がスクリーンのガモット色を越えた場合に、 CCCに指定したガモット圧縮手続きが呼ばれる。 ガモット圧縮手続きがクライアントデータを要求した場合、このデータはCCCにある ガモット圧縮クライアントデータを経て渡される。

デバイス非依存な色空間とデバイス依存な色空間の間での表色変換の間、 白色調整手続きがCCCに指定されている場合、 クライアントの白色点とスクリーンの白色点が異なるとき、この手続きが引き起こされる。 要求された場合、クライアントデータがCCCから得られる。

Prototype Gamut Compression Procedure

ガモット圧縮コールバックインターフェイスは次のようになる。

typedef Status (*XcmsCompressionProc)(ccc, colors_in_out, ncolors, index, compression_flags_return)
XcmsCCC ccc;
XcmsColor colors_in_out[];
unsigned int ncolors;
unsigned int index;
Bool compression_flags_return[];
ccc
CCCを指定。
colors_in_out
表色の配列を指定。 pixelメンバーは無視され、返り値が変更されない間保持されなければならない。
ncolors
表色の配列における XcmsColor構造体の数を指定。
index
スクリーンのガモット色を越えているのに出くわした表色に対する XcmsColor構造体の配列へのインデックスを指定。 有効な値は0(最初の要素に対して)からncolor -1 までである。
compression_flags_return
圧縮状態を示す真偽値の配列を返す。 NULLでないポインタが返され、 与えられたインデックスにおける色が圧縮されている場合、 この配列に相当するインデックスに Trueが格納される。 そうでない場合、配列は変更されない。

ガモット圧縮の手続きを実装する時、次の規則や仮定を考慮する。

Supplied Gamut Compression Procedures

以下の方程式はガモット圧縮関数を示す時に便利なものである。

%CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )%
%CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]%
%CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )%
%CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]%

Xlibにより提供されるガモット圧縮コールバックプロシージャは以下のようなものである。

Prototype White Point Adjustment Procedure

白色点調整手続きのインタフェースは以下を守らなければならない:

typedef Status (*XcmsWhiteAdjustProc)(ccc, initial_white_point, target_white_point, target_format,
colors_in_out, ncolors, compression_flags_return)
XcmsCCC ccc;
XcmsColor *initial_white_point;
XcmsColor *target_white_point;
XcmsColorFormat target_format;
XcmsColor colors_in_out[];
unsigned int ncolors;
Bool compression_flags_return[];
ccc
CCCを指定。
initial_white_point
初期の白色点を指定。
target_white_point
ターゲットの白色点を指定。
target_format
ターゲットの表色フォーマットを指定。
colors_in_out
表色の配列を指定。 pixelメンバーは無視され、抜ける時、変化しないように保持する。
ncolors
表色の配列における XcmsColor構造体の数を指定。
compression_flags_return
圧縮状態を示す真偽値が返る。 NULLでないポインタが示された場合、 与えられたインデックスにおける色が圧縮され、その場合 Trueがこの配列に相当するインデックスに格納される。 そうでない場合、配列は変更されない。

Supplied White Point Adjustment Procedures

Xlibにより提供される白色点調整手続きは以下のものがある。

実装の観点から これらの白色点の調整手続きは表色を デバイス非依存に変換するが、白色点依存の色空間 (例えば、CIE L*u*v, CIE L*a*b, TekHVC)は一つの白色点を使い、 その時、他の白色点を使いこれらの表色をターゲットの色空間に変換する。 言い替えると、 初期の白色点とターゲットの白色点の間の置き換えによる色彩のシフト が生ずることにより、 表色が一つの白色点で色空間内に収まるが、他の白色点でははみ出る。 白色点に依存しないと仮定されているCIE色空間はCIE u'v'Y, CIE XYZ, CIE xyY である。 色管理システムを使用する時に、初期にアクセスできないデバイス非依存の色 空間を使用する独自の白色点調整手続きを開発する時、 それが加えられること保証するため XcmsAddColorSpaceを使う。

例として、 CCCが白色点調整手続きを指定し、クライアントの白色点とスクリーンの 白色点が異なる場合、 関数 XcmsAllocColorは白色点調整手続きを2回使う。

例えば、指定が XcmsCIEuvY内にあり、調整手続きが XcmsCIELuvWhiteShiftColors であると仮定する。 XcmsRGB に変換している間、 XcmsAllocColor の呼び出しにより以下の順に表色の変換が行われる。:

生成されたRGB指定は XAllocColor に渡され、 XAllocColorに返されるRGB指定は 色変換の作業を逆にすることにより XcmsCIEuvYに戻される。

Gamut Querying Functions

この節はXlibが提供するガモット問い合わせ関数を示す。 これらの関数によりクライアントはCIE L*a*b,CIE L*u*v,TekHVC色空間に 関係するスクリーンのガモット色の境界を問い合わせることが できる。 また、以下の表色を問い合わせる関数も提供される。:

ガモット問い合わせ関数に渡されるもしくは返される表色に関連づけられた 白色点はスクリーンの白色点であると仮定される。 これは合理的な仮定である。 なぜならクライアントはスクリーンのガモット色を問い合わせよう としているからである。

以下の名前変換は最大値と最小値関数で使われる。

Xcms<color_space>QueryMax<dimensions>
Xcms<color_space>QueryMin<dimensions>

<dimensions>は固定されていない色空間の次元を 確認する文字からなる。 例えば、 XcmsTekHVCQueryMaxCは最大の彩度を見つけるための固定された色相と輝度に与えられる。

Red, Green, and Blue Queries

黒色(R,G,Bの強度がゼロの色)における表色を得るには、 XcmsQueryBlack を使う。

Status XcmsQueryBlack(ccc, target_format, color_return)
XcmsCCC ccc;
XcmsColorFormat target_format;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される
target_format
目的の表色フォーマットを指定。
color_return
R, G, B の強度がゼロの色に対する指定した目的フォーマットの表色が返される。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsQueryBlackは、R, G, B の強度がゼロの色について、指定した目的フォーマットの表色を 返す。

青色(Bの強度が最大で、R,Gの強度がゼロの色)に対する表色 を得るには、 XcmsQueryBlue を使う。

Status XcmsQueryBlue(ccc, target_format, color_return)
XcmsCCC ccc;
XcmsColorFormat target_format;
XcmsColor *color_return;
ccc
CCCを指定 CCC のクライアント白色点と白色点調整手続きは無視されることに注意。
target_format
目的の表色フォーマットを指定。
color_return
Bの強度が最大で、R,Gの強度がゼロの色に対する指定した目的フォーマットの表色が返される。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsQueryBlueは、B の強度が最大で、R, G の強度がゼロの色について、 指定した目的フォー マットの表色を返す。

緑色(Gの強度が最大で、R,Bの強度がゼロの色)に対する 表色を得るには、 XcmsQueryGreen を使う。

Status XcmsQueryGreen(ccc, target_format, color_return)
XcmsCCC ccc;
XcmsColorFormat target_format;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
target_format
目的の表色フォーマットを指定。
color_return
Bの強度が最大で、R,Bの強度がゼロの色に対する指定した目的フォーマットの表色が返される。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsQueryGreenは、G の強度が最大で、R, B の強度がゼロの色について、指定した 目的フォー マットの表色を返す。

赤色(Rの強度が最大で、G,Bの強度がゼロの色)に対する 表色を得るには、 XcmsQueryRed を使う。

Status XcmsQueryRed(ccc, target_format, color_return)
XcmsCCC ccc;
XcmsColorFormat target_format;
XcmsColor *color_return;
ccc
.\0 Specifies the CCC. CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
target_format
目的の表色フォーマットを指定。
color_return
Rの強度が最大で、G,Bの強度がゼロの色に対する指定した目的フォーマットの表色が返される。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsQueryRedは、R の強度が最大で、G, B の強度がゼロの色について、指定した 目的フォー マットの表色を返す。

白色(R,G,Bの強度が最大の色)に対する表色を 得るには、 XcmsQueryWhite を使う。

Status XcmsQueryWhite(ccc, target_format, color_return)
XcmsCCC ccc;
XcmsColorFormat target_format;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
target_format
目的の表色フォーマットを指定。
color_return
R,G,Bの強度が最大の色に対する指定した目的フォーマットの表色が返される。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsQueryWhiteは、R, G, B の強度が最大の色について、指定した 目的フォーマットの表色を 返す。

CIELab Queries

以下の式はCIELabの問い合わせ関数を示すのに便利なものである。

%CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )%
%CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]%

与えられた心理メトリック色相角とCIEメトリック輝度(L*)を使って 最大の心理メトリック彩度のCIE L*a*b座標を得るには、 XcmsCIELabQueryMaxC を使う。

Status XcmsCIELabQueryMaxC(ccc, hue_angle, L_star, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsFloat L_star;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue_angle
最大の彩度を見 つけるための色相角(弧度)を指定。
L_star
最大の彩度を求めるための輝度(L*)を指定。
color_return
与えられた色相角と輝度に対して、スクリーンで表示可能な 最大の彩度の CIE L*a*b 座標を返す。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsCIELabQueryMaxCは、与えられた色相角と輝度を使って、スクリーンが 表示可能な最大の彩度を 持つ点を見つける。 この座標は CIE L*a*b* 座標で返される。

与えられた心理メトリック色相角と心理メトリック彩度に対する 最大のCIEメトリック輝度(L*)のCIE L*a*b 座標を得るには、 XcmsCIELabQueryMaxL を使う。

Status XcmsCIELabQueryMaxL(ccc, hue_angle, chroma, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsFloat chroma;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue_angle
最大の明度を見つけるための色相角(弧度)を指定。
chroma
最大の輝度を見つけるための彩度を指定。
color_return
与えられた色相角と輝度に対して、スクリーンで表示可能な 最大の輝度の CIE L*a*b 座標を返す。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsCIELabQueryMaxLは、与えられた色相角と彩度を使って、ディスプレイで表示可能な CIE L*a*b* 色空間内で輝度が最大の点を見つける。 この点は CIE L*a*b* 座標で返される。 返し値 XcmsFailureは通常、与えられた彩度が与えられた色相角の最大値を 越えたことを示す。

与えられた心理メトリック色相角に対する 最大の心理メトリック彩度のCIE L*a*b 座標を得るには、 XcmsCIELabQueryMaxLC を使う。

Status XcmsCIELabQueryMaxLC(ccc, hue_angle, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue_angle
最大の彩度を見つけるための色相角(弧度)を指定。
color_return
与えられた色相角に対して、スクリーンで表示可能な 最大の彩度の CIE L*a*b 座標を返す。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsCIELabQueryMaxLCは、与えられた色相角を使って、スクリーンで表示可能な彩度が 最大の点を見つける。 この点は CIE L*a*b* 座標で返される。

与えられた心理メトリック色相角と心理メトリック彩度に対する 最小のCIEメトリック輝度(L*)のCIE L*a*b 座標を得るには、 XcmsCIELabQueryMinL を使う。

Status XcmsCIELabQueryMinL(ccc, hue_angle, chroma, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsFloat chroma;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue_angle
最小の輝度を見つけるための色相角(弧度)を指定。
chroma
最小の輝度を見つけるための彩度を指定。
color_return
与えられた色相角と彩度に対して、スクリーンで表示可能な 最小の輝度の CIE L*a*b 座標を返す。 返された表色に対応する白色点が、スクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsCIELabQueryMinLは、与えられた色相角と彩度を使って、スクリーンで表示可能な輝度(L*)が 最小の点を求める。 この点は CIEL*a*b* 座標で返される。 返し値 XcmsFailureは通常、与えられた彩度が与えられた色相角の最大値を 越えたことを示す。

CIELuv Queries

以下の式はCIELuvの問い合わせ関数を示すのに便利なものである。

%CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )%
%CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]%

与えられた心理メトリック色相角とCIEメトリック輝度(L*)に対する 最大の心理メトリック彩度のCIE L*u*v 座標を得るには、 XcmsCIELuvQueryMaxC を使う。

Status XcmsCIELuvQueryMaxC(ccc, hue_angle, L_star, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsFloat L_star;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整の手続きは無視される。
hue_angle
最大の彩度を見つける色相角(弧度)を指定。
L_star
最大の彩度を見つける輝度を指定。
color_return
与えられた色相角と輝度に対して、スクリーンで表示可能な 最大の彩度の CIE L*u*v* 座標が返される。 返された表色に対応する白色点は、スクリーンの 白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsCIELuvQueryMaxCは、与えられた色相角と明度を使って、スクリーンで表示可能な彩度が最大の 点を求める。 この点は CIE L*u*v* 座標で返される。

与えられた心理メトリック色相角と心理メトリック彩度に対する CIEメトリック輝度(L*)のCIE L*u*v座標を得るには、 XcmsCIELuvQueryMaxL を使う。

Status XcmsCIELuvQueryMaxL(ccc, hue_angle, chroma, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsFloat chroma;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整の手続きは無視される。
hue_angle
最大の輝度を見つける色相角(弧度)を指定。
L_star
最大の輝度を見つける輝度(L*)を指定。
color_return
与えられた色相角と彩度に対して、スクリーンで表示可能な 最大の輝度の CIE L*u*v* 座標が返される。 返された表色に対応する白色点は、スクリーン の白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsCIELuvQueryMaxLは、与えられた色相角と彩度を使って、スクリーンで表示可能な CIE L*u*v* 色空間内での輝度(L*)が最大の点を求める。 この点は CIE L*u*v* 座標で返される。 返し値 XcmsFailureは通常、与えられた彩度が与えられた色相角に対する 最大値を越えたことを示す。

与えられた心理メトリック色相角に対する最大の心理メトリック彩度 のCIE L*u*v 座標を得るには、 XcmsCIELuvQueryMaxLC を使う。

Status XcmsCIELuvQueryMaxLC(ccc, hue_angle, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsColor *color_return;
ccc
CCC を指定。 CCC のクライアント白色点と白色点調整の手続きは無視される。
hue_angle
最大の彩度を見つける輝度を指定。
color_return
与えられた色相角に対して、スクリーンで表示可能な 最大の彩度の CIE L*u*v* 座標が返される。 返された表色に対応する白色点は、スクリーン の白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsCIELuvQueryMaxLCは、与えられた色相角を使って、スクリーンで表示可能な彩度が最大の点を求める。 この点は CIE L*u*v* 座標で返される。

与えられた心理メトリック色相角と心理メトリック彩度に対する 最小のCIEメトリック輝度(L*)のCIE L*u*v 座標を得るには、 XcmsCIELuvQueryMinL を使う。

Status XcmsCIELuvQueryMinL(ccc, hue_angle, chroma, color_return)
XcmsCCC ccc;
XcmsFloat hue_angle;
XcmsFloat chroma;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整の手続きは無視される。
hue_angle
最小の輝度を見つける色相角(弧度)を指定。
chroma
最小の輝度を見つける彩度を指定。
color_return
与えられた色相角と彩度に対して、スクリーンで表示可能な 最小の輝度の CIE L*u*v* 座標が返される。 返された表色に対応する白色点は、スクリーン の白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsCIELuvQueryMinLは、与えられた色相角と彩度を使って、スクリーンで表示可能な 輝度(L*)が最小の点を求める。 この点は CIEL*u*v* 座標で返される。 返し値 XcmsFailureは通常、与えられた彩度が与えられた色相角に対する最大値を 越えたことを示す。

TekHVC Queries

与えられた色相と明度に対する最大の彩度を得るには、 XcmsTekHVCQueryMaxC を使う。

Status XcmsTekHVCQueryMaxC(ccc, hue, value, color_return)
XcmsCCC ccc;
XcmsFloat hue;
XcmsFloat value;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue
最大の彩度を見つけるための色相を指定。
value
最大の彩度を見つける明度を指定。
color_return
最大の彩度が見つかった実際の彩度と明度に対応するる最大の彩度が返される。 この返された表色に対応する白色点がスクリーン白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsTekHVCQueryMaxCは、与えられた色相と明度を使って、スクリーンで表示可能な TekHVC 色空間 における最大彩度を決定する。 この関数は、最大彩度が見つかった実際の色相と明度 とともに最大彩度を返す。

与えられた色相と彩度に対する最大の明度を得るには、 XcmsTekHVCQueryMaxV を使う。

Status XcmsTekHVCQueryMaxV(ccc, hue, chroma, color_return)
XcmsCCC ccc;
XcmsFloat hue;
XcmsFloat chroma;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue
最大の明度を見つけるための色相を指定。
chroma
最大の明度を調べる彩度を指定。
color_return
最大の明度が見つかった色相と彩度に対応する最大の明度が返される。 この返された表色に対応する白色点がスクリーン 白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsTekHVCQueryMaxV は、与えられた色相と彩度を使って、スクリーンで表示可能な TekHVC 色空間 内の最大明度を決定する。 この関数は、最大明度が見つかった実際の 色相と彩度とともに最大明度を返す。

指定した色相に達せられる最大の彩度と明度を得るには、 XcmsTekHVCQueryMaxVC を使う。

Status XcmsTekHVCQueryMaxVC(ccc, hue, color_return)
XcmsCCC ccc;
XcmsFloat hue;
XcmsColor *color_return;
ccc
CCCを指定。 CCC のクライアント白色点と白色点調整手続きは無視される 点に注意すること。
hue
最大の彩度を見つけるための色相を指定。
color_return
最大の彩度が見つかった実際の色相と最大彩度に達した明度、最大の彩度 に対するXcmsTekHVCにおける表色が返される。 この返された表色に対応する白色点がスクリーン 白色点である。 pixel メンバに返される値は、未定義である。

関数 XcmsTekHVCQueryMaxVCは、与えられた色相を使って、スクリーンで表示可能な TekHVC 色空間内での 最大彩度と、最大彩度に達した明度を 決定する。 この関数は、最大彩度、最大彩度に達した際の明度、最大彩度が 見つかった際 の実際の色相を返す。

最大の明度が達せられる指定した色相と彩度に対する最大の明度を含む ようなTekHVC指定の指定された数を得るには、 XcmsTekHVCQueryMaxVSamples を使う。

Status XcmsTekHVCQueryMaxVSamples(ccc, hue, colors_return, nsamples)
XcmsCCC ccc;
XcmsFloat hue;
XcmsColor colors_return[];
unsigned int nsamples;
ccc
CCC を指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue
最大の彩度/明度のサンプル点に対する色相を指定。
nsamples
サンプル点の数を指定。
colors_return
明度と色相に対して最大の彩度が得られるような XcmsTekHVC が持つ表色の nsamples メンバを返す。 返された表色に対応する白色点 がスクリーン白色点である。 pixel メンバに返される値は未定義である。

関数 XcmsTekHVCQueryMaxVSamplesは、最大明度の nsamples, 最大明度に達した際の彩度、最大彩度が見つかった 際の実際の色相を返す。 これらのサンプル点は、後で TekHVC 色空間内での指定された色相に対してスクリーンが 持つ色の範囲の最 大明度/最大彩度の境界をプロットするため に使うことができる。

与えられた色相と彩度に対する最小の明度を得るには、 XcmsTekHVCQueryMinV を使う。

Status XcmsTekHVCQueryMinV(ccc, hue, chroma, color_return)
XcmsCCC ccc;
XcmsFloat hue;
XcmsFloat chroma;
XcmsColor *color_return;
ccc
CCC を指定。 CCC のクライアント白色点と白色点調整手続きは無視される。
hue
最小の明度を見つけるための色相を指定。
value
最小の明度を見つけるための明度を指定。
color_return
最小の彩度が見つけられた最小の明度と実際の色相と彩度が返される。 この返された表色に対応する白色点がスクリーン白色点 である。 pixel メンバに返される値は、未定義である。

関数 XcmsTekHVCQueryMinVは、与えられた色相と彩度を使って、スクリーンで表示可能な TekHVC 色空間内の 最小明度を決定する。 この関数は最小明度と、最小明度が見つかった 実際の色相と彩度を返す。

Color Management Extensions

Xlibの色管理機能を2つの方法で拡張できる。

Color Spaces

CIE XYZ 色空間はデバイス非依存な色空間とデバイス依存の色空間の間の全ての 変換に対して中心として使われる。 それゆえ、 XcmsColor構造体をCIE XYZ形式に、もしくはこの形式から変換するための 情報はそれぞの色空間に関連づけられている。 例えば、CIE L*u*vからRGBへの変換はCIE L*u*vからCIE XYZに、そして CIE XYZ から RGBに変換するための情報を必要とする。 この情報は順に適用される時に、 CIE XYZ形式に、もしくはこの形式から XcmsColor構造体を変換する関数の配列として 格納される。 この表色の変換機構色空間の追加を容易にする。

もちろん、デバイス非依存の色空間の間でのみ、デバイス依存の色空間の間 でのみ変換する時に、 短縮することはいつでもできる。 例えば、TekHVCからCIE L*u*vへの変換はCIE u*v*Yへの中間的な変換に より行われ、その後、CIE L*u*vに変換される。 このようにCIE u*v*YとCIE XYZへの変換を飛ばすことになる。

Adding Device-Independent Color Spaces

デバイス非依存な色空間を追加するには、 XcmsAddColorSpace を使う。

Status XcmsAddColorSpace(color_space)
XcmsColorSpace *color_space;
color_space
追加するデバイス非依存な色空間を指定。

関数 XcmsAddColorSpaceはqデバイス非依存な色空間(実際的に XcmsColorSpace構造体)を色管理システムによりアクセスできるようにする。 登録されていない色空間に対するフォーマット値は実行時に与えられるので、 これらの値はクライアントにプライベイトなものとして扱われる。 登録されていない色空間への参照がクライアントの外で行われなければ ならない場合(例えば、登録されていない色空間を使って表色を ファイルに格納する時など)、 その時の参照は色空間のプレフィクスにより行われるべきである ( XcmsFormatOfPrefix, XcmsPrefixOfFormat を参照すること)。

XcmsColorSpace構造体が既に色管理システムにアクセス可能である場合、 XcmsAddColorSpaceXcmsSuccess .を返す。

加えられた XcmsColorSpacesはXlibによる参照に対して保持されなければならない ことに注意すること。

Querying Color Space Format and Prefix

指定した色文字列のプレフィクスに関連づけられた色空間 に関連するフォーマットを得るには、 XcmsFormatOfPrefix を使う。

XcmsColorFormat XcmsFormatOfPrefix(prefix)
char *prefix;
prefix
色空間プレフィクスを含む文字列を指定。

関数 XcmsFormatOfPrefixは指定した色空間プレフィクス(例えば、文字列 "CIEXYZ")に対する フォーマットを返す。 プレフィクスは場合によらない。 色空間が色管理システムからアクセスできない時、 XcmsFormatOfPrefixXcmsUndefinedFormat を返す。

色フォーマットに指定された色空間に関連づけられている色文字列 プレフィクスを得るには、 XcmsPrefixOfFormat を使う。

char *XcmsPrefixOfFormat(format)
XcmsColorFormat format;
format
表色のフォーマットを指定。

関数 XcmsPrefixOfFormatは引き数formatに指定された表色のエンコーディングに関連づけられた プレフィクスの文字列を返す。 そうでなく、エンコーディングが見つからない場合、NULLを返す。 返された文字列は読みだし専用として扱われる。

Creating Additional Color Spaces

色空間に必要な色空間に特定の情報や色文字列の解釈は XcmsColorSpace構造体に格納される。 それゆえ、この情報を含む新しい構造体はそれぞれ追加される色空間に 対して必要とされる。 デバイス非依存な色空間の場合、 この新しい構造体へのハンドル(これはグローバル変数の手段によるものである) は通常、関数 XcmsAddColorSpaceの使用によりクライアントプログラムにアクセスできるように行われる。

新しい XcmsColorSpace構造体がX コンソーシアムに登録されていない色空間を指定した場合、 クライアントにプライベイトなものとして扱われるべきである。 なぜなら、登録されていない色空間に対するフォーマット値は実行時に割り当てられるから である。 登録されていない色空間への参照がクライアントの外で行われなければならない場合 (例えば、登録されていない色空間を使って表色をファイルに格納する場合)、 そのときの参照は色空間プレフィクスにより行われなければならない ( XcmsFormatOfPrefix, XcmsPrefixOfFormat を参照すること)。

typedef (*XcmsConversionProc)();
typedef XcmsConversionProc *XcmsFuncListPtr;
		
		    /* NULLで終端された関数ポインタのリスト */
typedef struct _XcmsColorSpace {
	char *prefix;
	XcmsColorFormat format;
	XcmsParseStringProc parseString;
	XcmsFuncListPtr to_CIEXYZ;
	XcmsFuncListPtr from_CIEXYZ;
	int inverse_flag;
} XcmsColorSpace;

メンバーprefixは色文字列が色空間の文字列フォーマット内に あることを示すプレフィクスを指定する。 例えば、CIE XYZに対する "ciexyz","CIEXYZ"やRGBに対する "rgb","RGB"などである。 プレフィクスはそれぞれの場合による。 メンバーformat は表色のフォーマットを指定する。 登録されていないフォーマットが実行時に割り当てられる。 メンバーparseStringは XcmsColor構造体に色文字列を解釈できる関数への ポインタを含む。 この関数は成功した場合、ゼロでない整数値(int)を返し、 そうでない場合、ゼロを返す。 メンバー to_CIEXYZとfrom_CIEXYZはNULL終端された関数ポインタの リストへのポインタを含む。 関数のリストが順に実行される時、 XcmsColor構造体に指定された色 現在の色空間のフォーマットから/に、CIE XYZフォーマット から/に変換する。 それぞれの関数は成功した場合、ゼロでない整数値(int)を返し、 そうでない場合、ゼロを返す。 白色点がCCC内に見つけられる場合でさえも、色に関連づけるための 白色点は明示的に指定される。 メンバー inverse_flagがゼロでない場合、inverse_flagはto_CIEXYZにリストされた それぞれの関数を指定する。 その逆関数はfrom_CIEXYZから以下のように見つけられる。

与えられるもの: n = それぞれのリストにおける関数の数
それぞれの i に対して、0 <= i < nで
	from_CIEXYZ[n - i - 1]はto_CIEXYZ[i]の逆である。

これにより、Xlibは最も短い変換パスを使うことができる。 もし可能なら(例えば、TekHVCからCIE L*u*vへの変換)、CIE XYZを飛ばすことができる。

Parse String Callback

特定の色空間に色文字列を解釈するための XcmsColorSpace構造体内のコールバックは以下のソフトウェアインターフェイス仕様に 従わなければならない。

typedef int (*XcmsParseStringProc)(color_string, color_return)
char *color_string;
XcmsColor *color_return;
color_string
解釈する色文字列を指定。
color_return
色空間のフォーマットにおける表色を返す。

Color Specification Conversion Callback

デバイス非依存な空間の間で表色を変換するための XcmsColorSpace構造体内のコールバック関数は 以下のソフトウェアインターフェイス仕様に従わなければならない。

Status ConversionProc(ccc, white_point, colors_in_out, ncolors)
XcmsCCC ccc;
XcmsColor *white_point;
XcmsColor *colors_in_out;
unsigned int ncolors;
ccc
CCCを指定。
white_point
表色に関連する白色点を指定。 メンバーpixelは無視され、構造体の全体が返るまで変化しないよう 保持しなければならない。
colors_in_out
表色の配列を指定。 メンバーpixelは無視され、返るまで変化しないように保持されなければならない。
ncolors
表色の配列における XcmsColor構造体の数を指定。

デバイス依存な空間から、もしくは空間に表色を変換するための XcmsColorSpace構造体内のコールバック関数は 以下のソフトウェアインターフェイス仕様に従わなければならない。

Status ConversionProc(ccc, colors_in_out, ncolors, compression_flags_return)
XcmsCCC ccc;
XcmsColor *colors_in_out;
unsigned int ncolors;
Bool compression_flags_return[];
ccc
CCCを指定。
colors_in_out
表色の配列を指定。 メンバーpixelは無視され、返るまで変更しないように保持されなければならない。
ncolors
表色の配列内の XcmsColor構造体の数を指定。
compression_flags_return
圧縮状態を示す真偽値の配列を返す。 NULLでないポインタが与えられ、 与えられた色が圧縮された場合、 Trueがこの配列内に相当するインデックスに格納される。 そうでない場合、配列は変更されない。

変換関数は他の色空間による使用に対してグローバルに利用できる。 Xlibにより提供される変換関数は以下のものがある。
Function Converts from Converts to
XcmsCIELabToCIEXYZ XcmsCIELabFormat XcmsCIEXYZFormat
XcmsCIELuvToCIEuvY XcmsCIELuvFormat XcmsCIEuvYFormat
XcmsCIEXYZToCIELab XcmsCIEXYZFormat XcmsCIELabFormat
XcmsCIEXYZToCIEuvY XcmsCIEXYZFormat XcmsCIEuvYFormat
XcmsCIEXYZToCIExyY XcmsCIEXYZFormat XcmsCIExyYFormat
XcmsCIEXYZToRGBi XcmsCIEXYZFormat XcmsRGBiFormat
XcmsCIEuvYToCIELuv XcmsCIEuvYFormat XcmsCIELabFormat
XcmsCIEuvYToCIEXYZ XcmsCIEuvYFormat XcmsCIEXYZFormat
XcmsCIEuvYToTekHVC XcmsCIEuvYFormat XcmsTekHVCFormat
XcmsCIExyYToCIEXYZ XcmsCIExyYFormat XcmsCIEXYZFormat
XcmsRGBToRGBi XcmsRGBFormat XcmsRGBiFormat
XcmsRGBiToCIEXYZ XcmsRGBiFormat XcmsCIEXYZFormat
XcmsRGBiToRGB XcmsRGBiFormat XcmsRGBFormat
XcmsTekHVCToCIEuvY XcmsTekHVCFormat XcmsCIEuvYFormat

Function Sets

デバイス依存な色空間の間を変換する関数やCIE XYZは 出力デバイスの違うクラスごとに異なる (例えば、カラーと白黒モニター)。 色特性関数セットという考えが 発展してきた。 関数セットはデバイス依存の色空間と出力デバイスの特定のクラスに 適用できるデバイス依存な色空間とCIE XYZ色空間との間で表色 を変換できる関数からなる。 この関数セットはまたルートウィンドウプロパティとは関係無しに 色の特性データを読みだすことができる関数を含む。 特性データは出力デバイスのクラス内でデバイス間で異なるものである。 どのように色特性データをルートウィンドウプロパティに 格納するかの詳細については クライアント間通信マニュアル内のデバイス色特性の 節を参照すること。 LINEAR_RGB関数セットはXlibにより提供される ものであり、最も多くのカラーモニターを サポートする。 関数セットはLINEAR_RGB関数セットで必要とされる ものとは異なるデータを必要とする。 この場合、 これに相当するデータは異なるルートウィンドウプロパティに格納される。

Adding Function Sets

関数セットを追加するには、 XcmsAddFunctionSet を使う。

Status XcmsAddFunctionSet(function_set)
XcmsFunctionSet *function_set;
function_set
Specifies the function set to add.

関数 XcmsAddFunctionSetは色管理システムに関数セットを追加する。 関数セットが色管理システムからアクセスできない デバイ依存な XcmsColorSpace構造体を使う場合、 XcmsAddFunctionSetはこの構造体を追加する。 追加された XcmsColorSpace構造体がX コンソーシアムに登録されていないデバイス依存な色空間である 場合、 この構造体はクライアントにプライベイトなものとして 扱われる。 なぜなら、登録されていない色空間に対するフォーマット値は実行時に割り当てられる からである。 登録されていない色空間への参照がクライアント外で行われなければならない 場合(例えば、登録されていない色空間を使って表色をファイルに 格納する場合)、 その時の参照は色空間プレフィクスにより行われるべきである。 ( XcmsFormatOfPrefix, XcmsPrefixOfFormat を参照すること)。

追加する関数セットは他のXlibルーチンへの呼び出しが行われる前に 追加されるべきである。 そうでない場合、 前に作られた XcmsCCCのメンバー XcmsPerScrnInfoは追加された関数セットで初期化される機会がない。

Creating Additional Function Sets

追加する関数セットの作成は出力デバイスが存在している関数に適合しない時、 もしくは追加するデバイス依存な色空間が必要なときにのみ 作られるべきである。 関数セットは第一にデバイス依存な XcmsColorSpace構造体やそれらを読み出すための集合からなり、 screen's color characterization data. スクリーンの色特性データを格納する。 このデータは XcmsFunctionSet構造体に格納される。 この構造体へのハンドル(これはグローバル変数の手段による) は通常 XcmsAddFunctionSet での使用に対してクライアントプログラムにアクセスできるように 行われる。

関数セットが新しいデバイス依存な XcmsColorSpace構造体を使用する場合、 これらは一時的に色管理システムに処理される。 関数セットはデバイス依存な色空間に 対して XcmsColorSpace構造体を共有できる。 付け加えて、複数の XcmsColorSpace構造体がデバイス依存な色空間に対して許される。: しかし、関数セットは一つの構造体からのみ参照される。 これらの XcmsColorSpace構造体はCIE XYZに、CIE XYZから変換するための関数とは異なり、 このように特定の関数セットに仕立て上げられる。

typedef struct _XcmsFunctionSet {
	XcmsColorSpace **DDColorSpaces;
	XcmsScreenInitProc screenInitProc;
	XcmsScreenFreeProc screenFreeProc;
} XcmsFunctionSet;

メンバー DDColorSpaceは関数セットによりサポートされるデバイス 依存な色空間に対する XcmsColorSpace構造体へのポインタのNULL終端されたリストへのポインタである。 メンバー screenInitProcは特定のスクリーンに対して XcmsPerScrnInfo構造体を初期化するコールバック手続き(以下の インターフェイス仕様を参照すること)への セットである。

スクリーン初期化コールバックは以下のソフトウェアインターフェイス 仕様に従わなければ成らない。

typedef Status (*XcmsScreenInitProc)(display, screen_number, screen_info)
Display *display;
int screen_number;
XcmsPerScrnInfo *screen_info;
display
X サーバへの接続を指定。
screen_number
ホストサーバ上の適切なスクリーン番号を指定。
screen_info
XcmsPerScrnInfo 構造体を指定。これは前のスクリーン情報を含む。

XcmsFunctionSet構造体におけるスクリーン初期化コールバックはスクリーンのルートウィンドウ上の プロパティとは離れた、指定したスクリーンに対する 色特性データ(デバイスプロファイル)を持ってくる。 そのとき、 XcmsPerScrnInfo構造体を初期化する。 成功すれば、手続きは以下のように 構造体を埋める。

成功しない場合、手続きはメンバー stateを XcmsInitFailureにセットし、 XcmsFailure を返す。

The XcmsPerScrnInfostructure contains:

typedef struct _XcmsPerScrnInfo {
	XcmsColor screenWhitePoint;
	XPointer functionSet;
	XPointer screenData;
	unsigned char state;
	char pad[3];
} XcmsPerScrnInfo;

メンバー screenWhitePointはスクリーンに固有の白色点を指定する。 メンバー functionSet は適切な関数セットを指定する。 メンバー screenData はデバイスプロファイルを指定する。 メンバー stateは以下のいずれかがセットされる。

スクリーンのコールバックの解放は以下のソフトウェア インターフェイス仕様に従わなければならない。

typedef void (*XcmsScreenFreeProc)(screenData)
XPointer screenData;
screenData
解放されるデータを指定。

この関数は XcmsPerScrnInfo構造体に格納されたscreenDataを解放するために呼び出される。
目次に戻る