Previous: グラフィック関数で図形を描く
Up: Xウィンドウ実習
第4回 グラフィックスを描く

Next: 多数の色を使って描く
Previous Page: グラフィック関数で図形を描く
Next Page: 多数の色を使って描く

多数の図形を描く

今度は繰り返し命令を使って多数の図形(ここでは長方形)を 描くプログラムの例です。
二重の forループを使って縦横 16個ずつ全部で 256個の長方形を描きます。 関数 XFillRectangle() の引数のうち x と y が どのように与えられているか考えてみてください。
また、関数 XSetForeground() の中で指定するピクセル値は、 0 から 255 までの数値を直接与えています。 これによって、画面で用いられているカラーマップの 現在の状態が表示されるはずです。 (プログラムの側から色を指定して取り出すわけではないので、 Colormap構造体も XColor構造体も宣言する必要はありません!)
次のプログラムを完成させてください。 ソース・ファイル名は win12.c とします。

win12.c

#include<stdio.h>
#include<X11/Xlib.h>
main()
{
 Display *dsp;                       /* ディスプレイ構造体の宣言 */
 Window   win;                       /* ウィンドウ構造体の宣言 */
 GC   gc;                            /* GC構造体の宣言 */
 int  x, y, width, height;
 int  i;

dsp = XOpenDisplay( NULL ); /* ディスプレイのオープン */

/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 320, 320, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) ); /* GCの生成 */ gc = XCreateGC( dsp, win, NULL , NULL );

XStoreName( dsp, win, "Color Map" ); /* タイトルの設定 */

XMapWindow( dsp, win ); /* ウィンドウの表示 */ XFlush( dsp ); getchar(); /* リターンキーの入力まで停止する */

/* 図形を描く */ width=16; height=16; i=0; for( y=2 ; y<320 ; y+=20 ) { for( x=2 ; x<320 ; x+=20 ) { XSetForeground( dsp, gc, i ); /* 色の設定 */ XFillRectangle( dsp, win, gc, x, y, width, height ); /* 長方形 */ i++; } }

XFlush( dsp ); getchar(); /* リターンキーの入力まで停止する */

XCloseDisplay( dsp ); /* ディスプレイのクローズ */ }


プログラムができたら、コンパイルして実行してみましょう。
256個の長方形が表示されましたか? カラーマップの内容は その時の機械の状態によって変化します。したがって表示された色は 実行するたびに少しずつ違うはずです。当然隣の人の実行結果とも 違ってかまいません。

うまくいった人は次の課題に挑んでみてください。



Q&A




maruyama@wakhok.ac.jp
1995年02月01日 (水) 00時21分18秒 JST