色の指定はデフォルトでは、基本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