E 'davvero molto semplice, basta non molto intuitiva.
È necessario estendere ImageTranscoder
. Nel metodo createImage
si assegna uno BufferedImage
, lo si memorizza come variabile membro e lo si restituisce. Il metodo writeImage
è vuoto. E dovrai aggiungere un getter per recuperare lo BufferedImage
.
Si sarà simile a questo:
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;
}
}
Ora, per creare un'immagine si crea un'istanza del transcoder e passare la larghezza e l'altezza desiderata impostando TranscodingHints
. Infine si transcodifica da un TranscoderInput a un target Null. Quindi chiama il getter sul tuo transcoder per ottenere l'immagine.
La chiamata sembra qualcosa di simile:
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();
Semplice, no? (Sì, giusto. Solo mi ha portato 2 settimane per capirlo. Sigh.)
fonte
2010-03-22 21:01:43
Sì, quello che Devon ha detto. :) Ecco la mia classe SVGIcon che praticamente lo fa: http://mcc.id.au/2005/04/SVGIcon.java – heycam
La riga di apertura di questa risposta lo sigilla per me. Perché non posso dare più di +1 per questa risposta? Questo è ** esattamente ** ciò che rende così buono. – kevinarpe