[ 高橋のページ ] [ プログラミングおよび実習II2006 ]
ブラウザを使って自分の prog2 ディレクトリ内に保存しましょう.
10月26日の演習問題のプリントを提出し,チェックを受けてください.
以下の二つをまとめてチェックします.リダイレクションによってサンプル画像を入力して出力を適当なファイルに保存し,画像として表示して見せてください.
<プログラム image1.c>
<プログラム image2.c>
これはおまけ課題です.課題Bができた人が対象です.やらなくても実習成績の減点はありませんが,やると加点があるでしょう.
'<'や'>'を使って標準入力や標準出力をリダイレクトすると,キー入力や画面への出力の代わりにファイルを使って入出力できました.同じように,'|'(パイプといいます)を使うと,二つのプログラムの標準出力と標準入力をつなぐことができます.例えば,
$ ./image1 < uni3ascii.pgm | ./image2 > hoge.pgm
とすると,次のように画素反転と左右反転を一度に行うことができます.
では,サンプル画像の uni3kowai.pgm を入力として,
$ ./image1 < uni3kowai.pgm | ./imge2 | ./image3 > hoge.pgm
と実行すると hoge.pgm が uni3ascii.pgm と同じ画像になるようなプログラム image3.c を作りましょう.
実習室のLinux環境では,Netpbmという画像変換・処理ツール群が使えます. 例えばhoge.jpgという名前のJPEG画像が手元にあるとしたら,
$ jpegtopnm < hoge.jpg > hoge.ppm
とすると,PPM(バイナリ形式)の画像ファイル hoge.ppm が作成されます.次に,
$ ppmtopgm -plain < hoge.ppm > hoge.pgm
とすると,PGM(アスキー形式)の画像ファイル hoge.pgm が作成されます.もちろん,二つのコマンドをパイプでつないで
$ jpegtopnm < hoge.jpg | ppmtopgm -plain > hoge.pgm
としても構わないですね.
この hoge.pgm を自分の作ったプログラムに入力して遊んでみるとよいでせう.
ちなみに,上記の -plain というのは,ppmtopgmが出力するPGM画像をバイナリ形式 ではなくアスキー形式にするためのオプションです.jpegtopnmにこのオプションをつけて
$ jpegtopnm -plain < hoge.jpg > hoge.ppm
とすれば,hoge.ppm はアスキー形式のPPM画像になります.この画像形式を解読してカラー画像をいじって遊ぶとさらに楽しいかも.
ところで,PNMの画像フォーマットでは,ヘッダに#ではじまるコメント行を入れることが許されています.画像変換や処理のソフトウェアによってはコメントをつけて出力するものもありますので,そういった画像も自分のプログラムで扱うためには,エディタで一度開いてコメント行を削除する,あるいは,コメント行を読み飛ばせるように自分のプログラムを改造する,という作業が必要になります.