独自のカラーパレットを設定する   ('02年08月07日初版) 


 色の指定はデフォルトでは、基本16色を色番号を使って指定できるようにカラーパレ
ットが設定されてます(色と番号の対応については、ヘルプファイルをご覧ください)。
 その他に、基本色間を256段階で色が変化するようにカラーパレットを設定したり、
独自の色でカラーパレットを作成するための関数 setcolor256() が多重定義されていま
す。

 ここでは使いたい色のセットがあらかじめ決まっている場合、任意の色を自由にカラー
パレット番号に振り分けて使う方法を示します。

 使えるカラーパレットの色数は最大256(色番号0〜255まで)の範囲内であれば、
任意の色を設定できます。
 色の指定はRGB値を使います。RGB値を調べるには、Windows の付属ソフト”ペイント”
で、「色」-->「色の編集」-->「色の作成」で次のダイアログが開きます。ここで色を見
ながらRGB値を知ることができます。

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;
}
ソースファイル(color10.cpp)
次の実行結果が得られます。


48色のカラーパレット  このプログラムは、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;
}
ソースファイル(color15.cpp)
 さらに詳しいことは、ヘルプファイルとサンプルファイルをご覧ください。

| 戻る |
 

Copyright(c) 2002 Yamada, K