色の指定はデフォルトでは、基本16色を色番号を使って指定できるようにカラーパレ ットが設定されてます(色と番号の対応については、ヘルプファイルをご覧ください)。 その他に、基本色間を256段階で色が変化するようにカラーパレットを設定したり、 独自の色でカラーパレットを作成するための関数 setcolor256() が多重定義されていま す。 ここでは使いたい色のセットがあらかじめ決まっている場合、任意の色を自由にカラー パレット番号に振り分けて使う方法を示します。 使えるカラーパレットの色数は最大256(色番号0〜255まで)の範囲内であれば、 任意の色を設定できます。 色の指定はRGB値を使います。RGB値を調べるには、Windows の付属ソフト”ペイント” で、「色」-->「色の編集」-->「色の作成」で次のダイアログが開きます。ここで色を見 ながらRGB値を知ることができます。このダイアログにある基本色(48色)でカラーパレットを作成するプログラムを書いて みると次のようになります。
#include "glibw32.h" int main() { // 基本48色のRGB値 const int rgb[][3] = { {255,128,128},{255,255,128},{128,255,128},{ 0,255,128}, {128,255,255},{ 0,128,255},{255,128,192},{255,128,255}, {255, 0, 0},{255,255, 0},{128,255, 0},{ 0,255, 64}, { 0,255,255},{ 0,128,192},{128,128,192},{255, 0,255}, {128, 64, 64},{255,128, 64},{ 0,255, 0},{ 0,128,128}, { 0, 64,128},{128,128,255},{128, 0, 64},{255, 0,128}, {128, 0, 0},{255,128, 0},{ 0,128, 0},{ 0,128, 64}, { 0, 0,255},{ 0, 0,160},{128, 0,128},{128, 0,255}, { 64, 0, 0},{128, 64, 0},{ 0, 64, 0},{ 0, 64, 64}, { 0, 0,128},{ 0, 0, 64},{ 64, 0, 64},{ 64, 0,128}, { 0, 0, 0},{128,128, 0},{128,128, 64},{128,128,128}, { 64,128,128},{192,192,192},{ 64, 0, 64},{255,255,255} }; ginit(400, 300); GRAPH g; setcolor256( rgb, 48); // 48色からなるカラーパレットを設定 for(int i = 0; i < 6; i++) for(int j = 0; j < 8; j++) g.frectangle( 50*j,250 - 50*i, 49 + 50*j, 299 - 50*i, 8*i + j); delcolor256(); gend(); return 0; } |
次の実行結果が得られます。このプログラムは、48色のRGB値を2次元配列 rgb[48][3] に格納しておき、次の関数 setcolor256( rgb, 48); を呼び出します。1つ目の引数はRGB値を格納した配列で、2つ目の引数は色数つまり配列 の行のサイズです。これで、配列で指定した順に0から47番までの色番号が設定されます。 描画の最後には、必ず関数 delcolor256() を呼び出して、元の16色モードに戻します。 関数 setcolor256() は必ず関数 delcolor256() とペアで使います。 最も典型的な使い方は、色とその番号を指定したファイルを用意して、そのファイルを読 み込んで、描画を行う場合です。次のような、1行毎に色のRGB値をカンマで区切ったファイ ルを用意します。色番号は1行目から順に0〜(行数 -1)番となります。 0,255, 0 0,255, 8 0,255, 16 0,255, 24 0,255, 32 0,255, 40 0,255, 48 0,255, 56 0,255, 64 ......... ......... このテキストファイル名を color256.csv とすると、次のようにプログラムから読み込んで 独自のカラーパレットを作成してグラフィックスで利用します。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "glibw32.h" int main() { // 色データのRGB値をファイルから読み込む int rgb[256][3]; // RGB値を格納する配列 int i, count = 0; // count:色の数をカウント char buf[30], *ptr, *q; FILE *fp; if( (fp = fopen("color256.csv", "r") ) == 0){// ファイルを開く printf( "ファイル color256.csv が見つかりません。\n"); exit(1); } while( fgets(buf, sizeof(buf), fp) ){ // 1行読み込む i = 0; for( q = buf; (ptr=strtok(q, ",\n")) != 0; q = 0)//切り出し rgb[ count ][i++] = atoi(ptr); count++; } fclose( fp ); // ファイルを閉じる ginit(400,400); // グラフィックスの初期化 setcolor256(rgb, count); // カラーパレットを設定 // カラーパレットを使って描画する delcolor256(); gend(); return 0; } |
さらに詳しいことは、ヘルプファイルとサンプルファイルをご覧ください。
| 戻る |
Copyright(c) 2002 Yamada, K