|
2.10.17 発展:色出力

出力デバイス別の色出力
グラフィックスを出力すると出力装置によってはうまく色を再現できないものがある.これは出力装置の配色形態に合った形で色データを与えなかったために起る問題である.出力装置によっては自動的に与えられた色データを適切な配色法で変換してくれるものもあるが,そうでないときは, Mathematicaの提供する配色機能を使い適切な形にしておくとよい.

配色法の指定
グラフィックスをPostScript形式で出力すると Mathematicaの配色指定が対応するPostScriptの配色指定になる.例えば, RGBColorで色を指定すると,出力コードには setrgbcolorのPostScript構文が生成される.最終的に配色処理ができるかできないかは使っている出力装置の表示あるいは印刷機能と出力装置の持っているPostScriptインタープリタの仕様による.
いずれにしても,多くの出力装置では, Mathematicaで設定した配色指定がほとんどそのままの形で使われ実際の配色率等が決定される.
ただし, Mathematicaの比率がそのまま使われると,出力装置によっては実際に表示,印刷すると違った色に映るときがでてくる.例えば,同じRGB配色のグラフィックスを複数のカラーモニターで表示させると,モニターごとに違った色合いで表示されるだろう.さらに,同じモニターでも,明暗やコントラストの調整をずらすと,色合いはまた変わってしまう.
また,人間の視覚でとらえられる色の幅に比べたら出力装置で再現できる色はどうしても限られている.視覚的にとらえられる色のなす空間は3つのパラメータで表現することが可能であるが,限られた数の原色ではその空間のすべての点を指定することは不可能である.
このため,出力装置によって違った配色法で色を指定する必要がある.放射する光から色を形成するカラーモニターの表示ではRGBの配色法が有効である.一方,プリンタによるカラー印刷では,反射光を使うので,シアン,マゼンタ,黄色,黒を原色としたCMYBの配色法が使われる.実際の印刷では,通常,同じイメージについて4回インクの塗布処理が行われ,回ごとに基本色が重ね塗りされ最終的な色が作り出される.
カラー表示用には RGBColorと Hueが適しているが,カラー印刷用には CMYKColorで配色するとよい.
Mathematicaの処理ではユーザが与える配色指定がそのまま使われる.また,特定の出力装置に外部出力するときは, ColorOutputの設定をしておくと,任意な配色法に従った色データにグラフィックスを変換してくれる.

色出力の変換
色データの生成で最も難しいのは「色の分解」である.例えば,印刷するには,RGB系の光の配色からCMYB系のインクの配合に変換しなければいけない. Mathematicaにはこの変換処理のため特別なアルゴリズムが用意されている.このアルゴリズムは典型的なモニターの色とカラー印刷のインク4色の近似関係に基づいて変換が行われる.また,印刷用のインクはモニターの色に対して補色的な関係にないので変換処理は非線形なものになってしまう.
上記の組込みの配色機能の他に,書式 ColorOutput -> fを使いユーザ定義の関数 fを配色変換に使うことも可能である.指定しておけば,出力時に関数 f が自動的に配色データに適用される.
Mathematicaではグラフィックスオブジェクトの設定に上記の配色指定のどれでも使えるが,擬似照明効果を伴った場合は配色計算でRGBが使われるので,色指定は RGBColorで行う必要がある.違う配色法を使った場合は,色の指定はすべてRGBに変換される.
RGB配色から赤色成分だけを取り出し,その2乗値をグレースケールのレベル値とする関数を定義する.
In[1]:= red[RGBColor[r_, g_, b_]] = GrayLevel[r^2]
Out[1]= 
さらに,グレースケールのレベル値が入力されたときは,単に2乗するように定義しておく.
In[2]:= red[GrayLevel[g_]] = GrayLevel[g^2]
Out[2]= 
定義した関数 redを使い赤色成分を2乗にする配色変換にかける(通常は色から白黒への変換が行われる).
In[3]:= Plot3D[Sin[x + y], {x, -3, 3}, {y, -3, 3}, ColorOutput -> red]

Out[3]= 
ColorOutputで独自の変換を行うときは,グラフィックスで使われているすべての配色を考慮して記述しておかなければいけない.擬似照明を伴った3Dグラフィックスでは,少なくとも, RGBColorと GrayLevelの配色変換をできるようにしておく.
|