とても簡単ですが、直感的ではありません。
延長する必要がありますImageTranscoder
。createImage
メソッド内で を割り当て、BufferedImage
メンバー変数としてキャッシュし、それを返します。writeImage
メソッドが空です。を取得するには、ゲッターを追加する必要がありますBufferedImage
。
次のようになります。
class MyTranscoder extends ImageTranscoder {
private BufferedImage image = null;
public BufferedImage createImage(int w, int h) {
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
return image;
}
public void writeImage(BufferedImage img, TranscoderOutput out) {
}
public BufferedImage getImage() {
return image;
}
}
ここで、イメージを作成するには、トランスコーダのインスタンスを作成し、設定によって目的の幅と高さを渡しますTranscodingHints
。最後に、TranscoderInput から null ターゲットにトランスコードします。次に、トランスコーダで getter を呼び出して画像を取得します。
呼び出しは次のようになります。
MyTranscoder transcoder = new MyTranscoder();
TranscodingHints hints = new TranscodingHints();
hints.put(ImageTranscoder.KEY_WIDTH, width);
hints.put(ImageTranscoder.KEY_HEIGHT, height);
transcoder.setTranscodingHints(hints);
transcoder.transcode(new TranscoderInput(url), null);
BufferedImage image = transcoder.getImage();
シンプルですね。(ええ、そうです。それを理解するのに2週間しかかかりませんでした。ため息。)