摇摆& Batik:从 SVG 文件创建 ImageIcon?
简而言之,我正在寻找一种使用 batik 库从 SVG 文件制作 ImageIcon 的方法。我不想首先将 SVG 光栅化到磁盘,我只是希望能够从 jar 文件中提取 svg 并将其作为 UI 元素放置。
我觉得这应该相当简单,但是蜡染 javadocs 并没有告诉我我需要知道什么。
(为什么是蜡染?好吧,我们已经在使用它了,所以我们不必运行另一个合法的库。)
Simply put, I'm looking for a way to make an ImageIcon from an SVG file using the batik library. I don't want to have to raster the SVG to disk first, I just want to be able to pull an svg out of the jar file and have it land as a UI element.
I feel like this should be reasonably easy, but the batik javadocs aren't telling me what I need to know.
(Why batik? Well, we're already using it, so we don't have to run another library past legal.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这确实很简单,只是不太直观。
您需要扩展
ImageTranscoder
。在createImage
方法中,您分配一个BufferedImage
,将其缓存为成员变量,然后返回它。 writeImage 方法是空的。您需要添加一个 getter 来检索 BufferedImage。它看起来像这样:
现在,要创建图像,您需要创建转码器的实例,并通过设置
TranscodingHints
为其传递所需的宽度和高度。最后,从 TranscoderInput 转码到空目标。然后调用转码器上的 getter 来获取图像。该调用看起来像这样:
很简单,对吧? (是的,对。我只花了两周时间就弄清楚了。叹息。)
It's really quite easy, just not very intuitive.
You need to extend
ImageTranscoder
. In thecreateImage
method you allocate aBufferedImage
, cache it as a member variable, and return it. ThewriteImage
method is empty. And you'll need to add a getter to retrieve theBufferedImage
.It will look something like this:
Now, to create an image you create an instance of your transcoder and pass it the desired width and height by setting
TranscodingHints
. Finally you transcode from a TranscoderInput to a null target. Then call the getter on your transcoder to obtain the image.The call looks something like this:
Simple, right? (Yeah, right. Only took me 2 weeks to figure that out. Sigh.)
我刚刚遵循 Devon 的 Batik-1.7 方法
但是,为了使其工作,我必须对提示对象进行以下添加:
似乎在 batik 的 XMLAbstractTranscoder( http://svn.apache.org/repos /asf/xmlgraphics/batik/tags/batik-1_7/sources/org/apache/batik/transcoder/XMLAbstractTranscoder.java)版本为 1.7。
I have just followed Devon's approach with Batik-1.7
However, in order to make it work I had to make the following additions to the hints object:
Seems like something has been updated in batik's XMLAbstractTranscoder( http://svn.apache.org/repos/asf/xmlgraphics/batik/tags/batik-1_7/sources/org/apache/batik/transcoder/XMLAbstractTranscoder.java) with version 1.7.
我尝试使用德文郡和约翰的建议,这几乎对我有用。我做了一些调整如下,请随意使用:
I tried using Devon's and John's suggestions, which nearly worked for me. I had to make some tweaks as follows, feel free to use:
避免传递 dom 参数:
transcoder.setTranscodingHints((Map) 提示);
To avoid passing dom parameters :
transcoder.setTranscodingHints((Map<?, ?>) hints);