Swing&Batik:从SVG文件创建ImageIcon?

Ele*_*hoy 19 java icons swing svg batik

简单地说,我正在寻找一种使用batik库从SVG文件制作ImageIcon的方法.我不想首先将SVG光栅转换为磁盘,我只是希望能够从jar文件中提取svg并将其作为UI元素.

我觉得这应该相当容易,但蜡染javadocs并没有告诉我我需要知道什么.

(为什么选择蜡染?好吧,我们已经在使用它了,所以我们不必经营另一个合法的图书馆.)

Dev*_*ler 22

这真的很容易,只是不太直观.

你需要扩展ImageTranscoder.在createImage您分配a 的方法中,将其BufferedImage缓存为成员变量,然后将其返回.该writeImage方法为空.而且你需要添加一个getter来检索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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,要创建一个图像,您需要创建一个代码转换器的实例,并通过设置将其传递给所需的宽度和高度TranscodingHints.最后,您从TranscoderInput转码为空目标.然后调用代码转换器上的getter来获取图像.

调用看起来像这样:

    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();
Run Code Online (Sandbox Code Playgroud)

简单吧?(是的,没错.只花了我两个星期的时间来解决这个问题.叹了口气.)

  • 是的,德文说.:)这是我的SVGIcon类,几乎就是这样:http://mcc.id.au/2005/04/SVGIcon.java (5认同)