我希望在我的Vaadin应用程序中显示由某些API(适用于Canon Hack Development Kit的Java库)返回的BufferedImage,而不将其保存到文件系统中。这有可能吗?它似乎没有什么麻烦,但我到目前为止在Vaadin找不到任何办法。
答案 0 :(得分:1)
是的,Vaadin使用com.vaadin.server.StreamResource
完全可以实现这一点。 StreamResource
提供了一些InputStream
的数据,可以在预期com.vaadin.server.Resource
的任何地方使用(即链接,图片,图标......)。
以下示例方法动态为StreamResource
创建BufferedImage
:
private StreamResource createStreamResource() {
return new StreamResource(new StreamSource() {
@Override
public InputStream getStream() {
String text = "Date: " + DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM).format(new Date());
BufferedImage bi = new BufferedImage(370, 30,
BufferedImage.TYPE_3BYTE_BGR);
bi.getGraphics().drawChars(text.toCharArray(), 0,
text.length(), 10, 20);
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bi, "png", bos);
return new ByteArrayInputStream(bos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}, "dateImage.png");
}
这可以与com.vaadin.ui.Image
一起使用,如下所示:
Image image = new Image("", createStreamResource());
layout.addComponent(image);
有关详情,请参阅有关Stream Resources的Vaadin文档。