第3章 ラムダ式を使ったプログラミング : 問題 8 : 画像変換の生成
問題
画像に任意の幅と任意の色の枠を追加するColorTransformer
を生成するメソッドを実装せよ
解答
ColorTransformer
は、第3章 ラムダ式を使ったプログラミング : 問題 5 : 座標を考慮した画像変換 - CUBは子供の白熊 で以下のように定義した
@FunctionalInterface interface ColorTransformer { Color apply(int x, int y, Color colorAtXY); }
ちょっと引数が多いが、ColorTransformer
を生成するメソッドは以下のようになる。
■ ColorTransformer
生成
/** * 与えられた幅と色の枠を追加する ColorTransformer の生成 * * @param width 変換対象画像の幅 * @param height 変換対象画像の高さ * @param frameWidth 枠の幅 * @param frameColor 枠の色 * @return 画像の色変換 */ public static ColorTransformer colorTransformer( int width, int height, int frameWidth, Color frameColor) { return (x, y, c) -> x < frameWidth || y < frameWidth || x >= width - frameWidth || y >= height - frameWidth ? frameColor : c; }
問題 5 と同じ結果を得るには、以下のようにtransform
メソッドを呼び出す
■ 問題 5 と同じ結果
public void start(Stage stage) throws Exception { Image image = new Image("queen-mary.png"); int width = (int)image.getWidth(); int height = (int)image.getHeight(); Image image2 = transform(image, colorTransformer(width, height, 10, Color.GRAY)); stage.setScene(new Scene(new HBox(new ImageView(image), new ImageView(image2)))); stage.show(); }