在Batik中生成背景图像

时间:2011-04-26 18:09:35

标签: svg batik

我有一个生成字节数组的方法,可以表示为二维图像。我想在蜡染中将此图像显示为背景图像。我不想将数组保存到磁盘(作为图像),然后将其加载到蜡染。相反,我想将数组提供给蜡染。我虽然使用ParsedURLData可以帮助我,但我无法弄清楚如何使它工作。有什么建议吗?

我致电ParsedURL.registerHandler(new MyProtocolHanlder("myprotocol"));MyProtocolHanlder.parseURL返回MyParsedURLData

我认为返回我自己的流会起作用,但事实并非如此。在下面的示例中,我只是从磁盘加载图像并尝试显示它。

class MyParsedURLData extends ParsedURLData {
    public MyParsedURLData() {
    }

    @Override
    public InputStream openStreamRaw(String arg0, Iterator arg1) throws IOException {
        return new File("some_image_here").toURI().toURL().openStream();
    }

}

如果在MyParsedURLData的构造函数中设置protocol = "file"path="another_image",则无论openStreamRaw返回什么信息流,都会加载另一个图像。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是将图像保存到临时文件,然后通过File.toURI().toURL()引用它,Batik将加载它。您不需要自定义协议处理程序或ParsedURL。选择Batik支持的标准图像格式,例如PNGJPEG作为临时文件!

您可以通过实施ParsedURLProtocolHandlerRegistryEntry来保存临时文件,并将其注册到Batik。在网站上有一些关于它的文档,但它仍然是一个痛苦的事情。花了我几个小时来弄清楚(并且代码还没有准备好分享),但我现在可以直接将BufferedImage传递给Batik,而不首先将其编码为.png或类似文件。