Это действительно довольно просто, просто не очень интуитивно понятно.
Вам необходимо расширить 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 в нулевую цель.Затем вызовите геттер вашего транскодера, чтобы получить изображение.
Вызов выглядит примерно так:
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 недели, чтобы понять это. Вздох.)