Это действительно очень просто, просто не очень интуитивно понятно.
Вам нужно расширить 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 недели, чтобы понять это. Эх.)
person
Devon_C_Miller
schedule
22.03.2010