我有一个生成字节数组的方法,可以表示为二维图像。我想在蜡染中将此图像显示为背景图像。我不想将数组保存到磁盘(作为图像),然后将其加载到蜡染。相反,我想将数组提供给蜡染。我虽然使用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
返回什么信息流,都会加载另一个图像。
有什么建议吗?
答案 0 :(得分:0)
最简单的方法是将图像保存到临时文件,然后通过File.toURI().toURL()
引用它,Batik将加载它。您不需要自定义协议处理程序或ParsedURL
。选择Batik支持的标准图像格式,例如PNG
或JPEG
作为临时文件!
您可以通过实施ParsedURLProtocolHandler
和RegistryEntry
来保存临时文件,并将其注册到Batik。在网站上有一些关于它的文档,但它仍然是一个痛苦的事情。花了我几个小时来弄清楚(并且代码还没有准备好分享),但我现在可以直接将BufferedImage
传递给Batik,而不首先将其编码为.png
或类似文件。