伊達
>>
gnuplot で画像を表示
3x3 ピクセルの例
100 011 101という画像!を表現したい場合.
% gnuplot gnuplot> set pm3d gnuplot> splot '-' 0 0 1 0 1 1 0 1 0 0 2 0 0 2 1 0 3 1 1 0 1 1 1 1 1 1 0 1 2 0 1 2 1 1 3 1 1 0 0 1 1 0 1 1 1 1 2 1 1 2 0 1 3 0 2 0 0 2 1 0 2 1 1 2 2 1 2 2 0 2 3 0 2 0 1 2 1 1 2 1 1 2 2 1 2 2 0 2 3 0 3 0 1 3 1 1 3 1 1 3 2 1 3 2 0 3 3 0 eと入力すれば,画像が表示される. この結果だけ見るととても大変. 1ピクセルごとの描画ではうまくいかないので, 幅1の帯を6本描いている.
横 nx ピクセル, 縦 ny ピクセルからなる画像データを表示したい場合, 1次元の配列 img[i] に画像データを入れ 関数 write_data を 呼び出せば,画像を描画してくれる関数を以下に示します. 表示するだけなら,あとは何も考えなくてよい(はず). 多数の小さい画像を並べて表示させたい場合は, 自分で大きい画像データ img[i] を作る必要があります. やさしい問題なので write_multi_images という名前で関数を作ってみてください.
/* Write data for gnuplot */ void write_data( int *img, int nx, int ny){ int i,x,y; for (x=0; x < nx; x++){ for (y=0; y < ny; y++){ i = x + (ny -y -1)*nx; fprintf(gp, "%d %d %d\n", x, y, img[i]); fprintf(gp, "%d %d %d\n", x, y+1, img[i]); } fprintf(gp, "\n"); for (y=0; y < ny; y++){ i = x + (ny -y -1)*nx; fprintf(gp, "%d %d %d\n", x+1, y, img[i]); fprintf(gp, "%d %d %d\n", x+1, y+1, img[i]); } fprintf(gp, "\n"); } }
例えば 8 x 8 ピクセルの画像(パッチ)25 枚を 5 x 5 段 で 表示したい場合,あらかじめ img[] という1つの配列に 自分でレイアウトした結果を書き込んでおけばよい. あらかじ画像パッチと画像パッチの上下と左右の 間隔を設定しておく必要がある.