いろいろな色が思う存分に使えたらグラフィクスの表現力は格段に増します. GRPH1 の出力プリミティブはすべてカラー対応していますから,ちょっとした プログラムの追加・変更でカラーグラフィクスが可能です.
GRPH1 の出力プリミティブのうち,トーンプリミティブ以外はすべて線分で構 成されています.線分の属性のうち,ラインインデクスには色の情報が含まれ ています.また,トーンプリミティブには,トーンパターン番号という属性が あり,やはり色の情報が含まれています.
GRPH1 で描かれる線分のラインインデクスは3桁の整数(nnm)で指定します. 線の太さと色の両方が変えられるようなシステムでは,上位2桁 (nn=0〜99)が色番号,下位1桁(m=0〜9)が線の太さを表します.(こ れまでの章では,下位1桁だけを使ってきました.)色番号は,1から5までは標 準的に,1: 白または黒(フォアグラウンド), 2: 赤,3: 緑,4: 青,5: 黄, と決められていますが,それより大きな番号に関しては カラーマップファイ ルの定義によります.
カラーマップファイルとは,色番号と実際の色を対応づけるデータファイルで あって,内部変数 'CLRMAP' が示すファイルです.標準的なライブラリ においては,X 用として .x11, PS 用として .psx のサフィック スをつけると,それらが優先的に検索されます.色はRGBの強さで指定されて おり,それらの値の範囲は0から65535(16bit)です.機種によってはこれだけ の階調が表現できない場合もありますが,適当な階調に読み変えますから,異 なるシステムでもこのファイルはそのまま有効です.
トーンパターン番号には色の情報とパターンの情報が両方含まれており,5桁 の整数(nnlll)で指定します.上位2桁が上に述べた色番号,下位3桁がパター ン番号です.パターン番号は第[here]節で説明しましたが,パター ン番号として999を指定するとべたぬりとなります.
次の COLOR1 プログラムは,カラーマップのサンプルテーブルを作るプ ログラムです.38行めでトーンパターン番号を代入していますように,100色 を描き出します.このように1つの作図では高々100色しかつかえませんが,カ ラーマップファイルを取り替えるとさまざまな色が使えます. dcl-x.x/demo/grph2/rakuraku/color/ にも何種類かのカラーマップファイル を置いています.これをカレントディレクトリにコピーしてカラー描画の実行 ファイルを実行すると,コピーしたカラーマップが使われるようになります. 例えば,それぞれのRGBの値を大きめにシフトさせるとパステルカラー調のカ ラーマップとなります.
ポリライン,ポリマーカー,テキストなどの線分による出力プリミティブは, 個別にラインインデクスを指定することができましたから,それぞれ,フルに 3桁の値で指定すると,カラーのライン,マーカー,テキストとなります.ま た,GRPH2 の各パッケージも,用いられている線分のラインインデクスに関す る内部変数を変更できるようになっていますから,容易にカラー化できます. 次の COLOR2 プログラムで,カラー線画の実例を見てみましょう.
UZpGET/UZpSET ルーチンで座標軸関連の内部変数の管理を行ないますが, そのなかの 'INDEXT1', 'INDEXT2', 'INDEXL1', 'INDEXL2' がラインインデクスの設定に関するものです.'INDEXT1' と 'INDEXT2' は座標軸および目盛を描く線分の,'INDEXL1' と 'INDEXL2' はラベルおよびタイトルの文字を描く線分のラインインデク スを指定する内部変数です.最後が '1' のほうが小さめの目盛やラベ ル,タイトルを描く時に用いられ,'2' のほうは大きめのものを描く時 に用いられます.
この例では,標準のカラーマップを用いた時, 目盛は淡青で描き,小さめの文 字は濃青で,大きめの文字は紫で描きます.太さは,小さめの目盛は細線で, それ以外はやや太くなります.
折れ線をSGPLU ルーチンで描くのですが,そのラインインデクスは SGSPLI ルーチンで 24, 赤色の太い線と指定しています.
COLOR3 プログラムはトーンプリミティブを用いたカラー塗り分けの例 です.第[here]節のU2D7 プログラムではパターンだけで塗り分けていたのを, ここでは色で塗り分けて見ましょう.DO 20 のループでトーンパターン 番号を各レベルに割り当てています.トーン番号が30999から85999までの56色 (濃青から,緑,黄,橙,赤まで)です.下3桁を999としてべたぬりを指定して います.コンターは引かずに,トーンバーを右側につけています.ハードフィ ル(初期値)でぬりつぶしますから,各ルーチンを呼ぶ順番に気をつける必要が あります.
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:10:55 EDT 1995