Nó thực sự khá dễ dàng, chỉ cần không phải là rất trực quan.
Bạn cần gia hạn ImageTranscoder
. Trong phương thức createImage
, bạn phân bổ BufferedImage
, hãy lưu nó làm biến thành viên và trả lại. Phương thức writeImage
trống. Và bạn sẽ cần phải thêm một getter để lấy BufferedImage
.
Nó sẽ giống như thế này:
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;
}
}
Bây giờ, để tạo ra một hình ảnh mà bạn tạo ra một thể hiện của chuyển mã của bạn và vượt qua nó với chiều rộng và chiều cao mong muốn bằng cách thiết lập TranscodingHints
. Cuối cùng, bạn chuyển mã từ TranscoderInput thành một mục tiêu rỗng. Sau đó, gọi bộ thu phát trên bộ chuyển mã của bạn để lấy hình ảnh.
Cuộc gọi trông giống như sau:
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();
đơn giản, phải không? (Ừ, đúng vậy. Chỉ đưa tôi 2 tuần để con số đó ra. Thở dài).
Nguồn
2010-03-22 21:01:43
Đúng vậy, những gì Devon nói. :) Đây là lớp SVGIcon của tôi mà khá nhiều hiện rằng: http://mcc.id.au/2005/04/SVGIcon.java – heycam
Dòng mở của câu trả lời này niêm phong nó cho tôi. Tại sao tôi không thể cung cấp nhiều hơn 1 cho câu trả lời này? Đây là ** chính xác ** những gì làm cho SO rất tốt. – kevinarpe