9.5 色を指定する関数

newpen 16色から色を選ぶ

newpen(win, n)

n は整数型。色番号は 0:黒 1:白 2:赤 3:緑 4:青 5:シアン 6: マゼンタ 7:黄 8:灰色(暗) 9:灰色 10:赤(暗) 11:緑(暗) 12:青(暗) 13:シアン(暗) 14:マゼンタ(暗) 15:黄(暗) が用意されている。16 以上はすべて 15 と同じとみなされる。

newrgbcolor 自由な色を指定する

newrgbcolor(win, r, g, b)

r, g, b はいずれも整数型。それぞれ red, blue, green を意味し、0〜255 までの数値で各色の発色度合いを設定することで、合計 1600 万色の色が出せる。具体的に赤色の長方形を描く場合は以下のようにする。(つまり赤が最大発色で他が最低発色となるよう指定している。)

  r=255; g=0; b=0; 
  newrgbcolor(win, r,g,b);
  fillrect(win, 100.0, 100.0, 50.0, 50.0);

うまくプログラミングすることで、かなりなめらかな色の変化も出せます。

色の変化

R, G, B の数値をつけた色見本を表示する以下のプログラムをつけておきますので実行して参考にして下さい。

#include <eggx.h>
#include <stdlib.h>

int main() {
  int win, r, g, b;
  double x,y,h,w,xx,yy;
  
  win=gopen(960,600);  /* 描画ウィンドウを開く */
  winname(win, "rgb"); /* 名前をつける */

  h=23.0; w=40.0;
  x=10.0;
  y=50.0;

  /* 6 段階ずつに区切る */
  for(r=0;r<6;r++) { /* 赤 */
    for(g=0;g<6;g++) { /* 緑 */
      for(b=0;b<6;b+=2) { /* 青 */

        newrgbcolor(win, r*51, g*51, b*51);
        xx=x+(r+b*3)*w*1.3; yy=y+g*h*2;
        fillrect(win, xx, yy, w, h);
        newrgbcolor(win, 100,100,100);
        drawstr(win,xx,yy-10,7,0,"%3i,%3i\n   ,%3i",r*51,g*51,b*51) ;

        newrgbcolor(win, r*51, g*51, (b+1)*51);
        xx=x+(r+b*3)*w*1.3; yy=y+(g+6)*h*2;
        fillrect(win, xx, yy, w, h);
        newrgbcolor(win, 100,100,100);
        drawstr(win,xx,yy-10,7,0,"%3i,%3i\n   ,%3i",r*51,g*51,(b+1)*51) ;

      }
    }
  }
  ggetch();
  gclose(win);
  return 0;
}

実行結果

gsetbgcolor 背景色を変える

gsetbgcolor(win, color)

color は色名。gsetbgcolor(win, "White") などとして使います。gsetbgcolor( ) 関数を呼び出しただけでは背景色は変わりません。その後に gclr(win) を実行することで背景の塗り直しが行われ、指定した色になります。(つまり gsetbgcolor( ) 関数は「次回の gclr( ) 関数の塗りつぶし色を決める」ものだと考えればよいでしょう。)
指定できる色の名前のうち代表的なものを以下に示しておきます。 [1]

snow         ivory        seashell     honeydew     MintCream    
azure        lavender     MistyRose    white        black        
DimGrey      grey         LightGrey    MidnightBlue navy         
MediumBlue   RoyalBlue    blue         SkyBlue      turquoise    
cyan         aquamarine   DarkGreen    SeaGreen     green        
GreenYellow  LimeGreen    OliveDrab    yellow       chocolate    
brown        salmon       orange       DarkOrange   coral        
LightCoral   tomato       OrangeRed    red          HotPink      
DeepPink     pink         LightPink    magenta      violet       
plum         orchid       purple  

gclr() 関数 も参照。



Yutaka Yasuda (yasuda@bakkers.gr.jp)