6/11 課題


以下のプログラム
class Grad{
  public static void main(String[] args){
    int width=128, height=128;
    System.out.println("P3 "+width+" "+height+" 255");
    int i,j;
    for(i=0;i<height;i=i+1){
      for(j=0;j<width;j=j+1){
        System.out.println("255 255 "+(j*2));
      }
    }
  }
}
を ~/jousho03以下にGrad.java という名前で保存して,
javac Grad.java
とコンパイルして,
java Grad > grad.ppm
とプログラムを実行し,出力を grad.ppm というファイルに保存すると,この ファイルは PPM形式(Portable PixMap形式)の画像ファイルになっている.
convert grad.ppm grad.gif
を実行して,gif形式にしたのが
grad.gif
である.

上のプログラムの

        System.out.println("255 255 "+(j*2));
の行を変更して,
grad0.gif
のような画像ファイルを作成するプログラムにしなさい.

ヒント

grad.gif
の一番左側のピクセル(jが0)の RGB(Red Green Blue)値は(255 255 0)なので 黄色になり,一番右側のピクセル(jが127)のRGB値は(255 255 254)なのでほぼ 白色になっている.
grad0.gif
のような画像を作成するには,画面の左上(i=0, j=0)でほぼ青(0 0 254),画 面の右下(i=127, j=127)でほぼ赤(254 0 0)となるようにプログラミングする と良い.
プログラムがちゃんと動いて,作成したPPM形式のファイルが目的の画像に対 応していることを確かめたら,
/home/ktanaka/bin/report611 1
を実行してください.

課題の締切は 6/18(水) の21時です.


PPM形式について

PPM形式に関しては,5/21の講義でも触れたが,もう 一度説明する. PPM形式にはテキスト形式とバイナリ形式があるが,こ こではテキスト形式のみ扱う(convert コマンドで作成されるPPMファイルはバ イナリ形式の場合があるが,pnmnorawコマンドで変換できる).実際の例で見 てみる.
P3
4 4
255
  0   0   0    0   0   0    0   0   0  255   0 255
  0   0   0    0 255 127    0   0   0    0   0   0
  0   0   0    0   0   0    0 255 127    0   0   0
255   0 255    0   0   0    0   0   0    0   0   0
上の部分をt.ppmというファイルで保存して,
gimp t.ppm
でみると,幅4ドット,高さ4ドットの米粒のような画像が現れるがこれを zoom in していくと,
4x4.gif
のような画像とわかる.このファイルの説明をする.
P3
の部分がマジックナンバーという部分で,このファイルが他の画像ファイルで
はなくPPM形式であることを示す(Windowsの多くのアプリケーションのように,
拡張子が .ppm でああることで判断しているわけではない).PPM形式では空白
(White Space, Spaceコードだけではなく改行,タブも含まれる)はいくついれ
ても良いが,P3の前に入れてはいけない.マジックナンバーの後に 空白
があり,
4 4 255
で,画像の幅,高さ,色の階調数を順に指定する.階調の最大値は,一般には
R(red), G(Green), B(Blue)それぞれ 0(暗い)から255(明るい)までの256階調
あれば人間に自然な画像を表せるといわれているので,ここでは 255 を指定
している.詳しくは, 情報処理システム:画像を参照すること.

その後で,

  0   0   0    0   0   0    0   0   0  255   0 255
  0   0   0    0 255 127    0   0   0    0   0   0
  0   0   0    0   0   0    0 255 127    0   0   0
255   0 255    0   0   0    0   0   0    0   0   0
のように,4x4=16ピクセルの RGB値を順に指定している.ピクセルの指定の順 番は横書きの文章と同じように左上から右下へ横方向に走査していく.1ピク セル内の指定の順番は R G Bの順番になっている.

上の例で現れる色は

  • (0,0,0) 黒
  • (255,0,255) RとBを混ぜた色なので紫(マゼンダ)
  • (0 255 127) Gに少しBを加えた色なので青目の緑
の3色である.