En realidad es muy fácil, pero no es muy intuitiva.
Necesita extender ImageTranscoder
. En el método createImage
asigna un BufferedImage
, lo almacena en caché como una variable miembro y lo devuelve. El método writeImage
está vacío. Y deberá agregar un getter para recuperar el BufferedImage
.
Se verá algo como esto:
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;
}
}
Ahora, para crear una imagen se crea una instancia de su transcodificador y pasarlo el ancho y la altura deseada mediante el establecimiento de TranscodingHints
. Finalmente, transcodifica desde un TranscoderInput a un objetivo nulo. Luego, llame al getter en su transcodificador para obtener la imagen.
La llamada se ve algo como esto:
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();
simple, ¿verdad? (Sí, claro. Sólo me tomó 2 semanas para darse cuenta de eso. Suspiro.)
Sí, lo que Devon dijo. :) Aquí está mi clase SVGIcon, que prácticamente hace eso: http://mcc.id.au/2005/04/SVGIcon.java – heycam
La línea de apertura de esta respuesta me la sella. ¿Por qué no puedo dar más de +1 por esta respuesta? Esto es ** exactamente ** lo que hace SO tan bueno. – kevinarpe