練習問題

1. グラデーション2

実行例に示す画像のような255×255の画像を作成してください. 画像ファイル名は gradiation2.png とし,クラス名は Gradiation2 としてください.

実行例

ヒント

2. ファイルフォーマット変換

2つのコマンドライン引数を受け取り,第1引数で与えられた画像を読み込み,第2引数で与えられたファイルに画像を出力してください. ただし,第2引数のファイル名の拡張子で指定されたフォーマットで画像を出力してください. クラス名は ImageFormatConverter としてください.

実行例

$ java ImageFormatConverter sample1.png a2-1.jpg
$ file a2-1.jpg  # 出力された a2-1.jpg のフォーマットを調べる.
a2-1.jpg: JPEG image data, JFIF standard 1.02, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 255x255, components 3
$ java ImageFormatConverter sample1.png a2-2.bmp
$ file a2-2.bmp  # 出力された a2-1.bmp のフォーマットを調べる.
a2-2.bmp: data

ヒント

3. グレースケール画像への変換

コマンドライン引数で与えられた画像をグレースケール画像に変換してgray.pngに出力してください. クラス名は GrayScaleFilter としてください. グレースケールへの変換は, BufferedReader の実体を作成する時に, BufferedImage.TYPE_BYTE_GRAY を指定するとグレースケール画像に変換できます.

実行例

グレースケールに変換した画像

ヒント

4. 画像の回転

コマンドライン引数で与えられた画像を,同じくコマンドライン引数で与えられた角度(度数法)だけ回転させて出力してください. ただし,画像が切れないように大きさを調整してください. 角度は 0〜90 の範囲とします. クラス名は ImageRotaterとしてください. グレースケール画像と同様に,元画像とは別の BufferedImageの実体を作成し,そこに回転した画像を描画しましょう.

実行例

$ java ImageRotater sample1.png 60 dset.png
回転後の画像

ヒント

変換後の画像の大きさ

画像の回転の様子

処理手順

Double angle = Math.toRadians(degree);
AffineTransform affine = new AffineTransform();
affine.translate(width * Math.sin(angle));
affine.rotate(angle);
// ... 出力先画像の Graphics2D の実体を取得し,g2 に代入する.
g2.drawImage(source, affine, null);

5. 自由課題

与えられた画像に対して何らかの変換を行いファイルに出力してください. クラス名は,ImageEditor としてください.