0

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

我打电话ParsedURL.registerHandler(new MyProtocolHanlder("myprotocol"));回来MyProtocolHanlder.parseURLMyParsedURLData

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

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();
    }

}

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

有什么建议么?

4

1 回答 1

0

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

ParsedURLProtocolHandler您可以通过实现 a和 a来保存临时文件RegistryEntry并将它们注册到 Batik。网站上有一些关于这方面的文档,但这样做仍然很痛苦。我花了几个小时才弄清楚(代码还没有真正准备好分享),但我现在可以BufferedImage直接将 a 传递给 Batik 而无需先将其编码为.png或类似文件。

于 2011-12-06T12:15:19.457 回答