当前位置: 首页 > 面试题库 >

Swing和蜡染:从SVG文件创建ImageIcon?

祝叶五
2023-03-14
问题内容

简而言之,我正在寻找一种使用蜡染库从SVG文件制作ImageIcon的方法。我不想先将SVG光栅化到磁盘上,我只想能够将一个svg从jar文件中拉出并将其作为UI元素放置。

我觉得这应该相当容易,但是蜡染的javadocs并没有告诉我我需要知道的内容。

(为什么要使用蜡染呢?好吧,我们已经在使用它了,所以我们不必在合法的情况下运行另一个图书馆。)


问题答案:

这确实很容易,但不是很直观。

您需要扩展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转码为空目标。然后在代码转换器上调用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();

简单吧?(是的,对。只花了我两个星期的时间就解决了。



 类似资料:
  • 当使用Apache Batik从SVG转换为PNG时,我有时会出现奇怪的错误。例如,对于这个SVGhttps://www.macstories.net/app/themes/macstories4/images/logo-shape-bw.svg它会抛出一个异常,但对于这个https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.sv

  • 有没有一种蜡染兼容的方法可以用SVG做自动文本换行? 我在网上找遍了,找不到确切的东西与HTML不兼容。我看到和朋友应该可以工作,但我似乎无法让他们正常工作。我也找不到一个确切有效的例子。 一个有效的 SVG 示例将不胜感激。

  • 我目前正在使用JavaFX2.2和Batik。我有一个应用程序,它有一个可以拖动多个SVG图片的窗格。这一切都是可行的,每个图片的svg代码都存储在每个对象中,所以我也可以得到它。 然而,现在我想对这个面板及其当前的子svg进行“截图”,并将其导出为SVG文件。 对我来说,有两种可能性: 1)使用takeSnapshot()函数将其导出为. png文件,并将其转换为svg 2)或者从所有小的svg

  • 你好,我有一个关于创建exe文件的问题。 我有一个名为main.py.的python文件此外,这个main.py需要另一个文件functions.py和两个文件的名称svg1.svg和scg2.svg. 现在我想将这个程序转换为. exe.到目前为止,我只更改了单个的. py文件。不幸的是,我在互联网上没有找到任何关于如何从几个. py文件和. svg文件中创建. exe的内容。 谁能告诉我用什么

  • 问题内容: 我有一个学生卡SVG,其中有名称,id和其他字段,我想通过Java编辑,因为用户使用GUI输入了它们。 我已经使用Batik成功解析了SVG,但是打开它时看不到在SVG文件中所做的更改。 当我使用以下命令打印出SVG元素的值之一时 它已更改,但是当我在记事本中打开SVG时是相同的。 SVG 其他更新:解决了 问题答案: 似乎您在这里没有使用任何特定的SVG功能,只是一些常规XML解析。