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