とても簡単ですが、直感的ではありません。
延長する必要があります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週間しかかかりませんでした。ため息。)