我想在我的 Vaadin 应用程序中显示由某些 API(Canon Hack Development Kit 的 Java 库)返回的 BufferedImage,而不将其保存到文件系统中。这有可能吗?挥杆似乎并不麻烦,但到目前为止我还没有找到在 Vaadin 做到这一点的方法。
问问题
2368 次
1 回答
2
是的,这完全可以通过 Vaadin 使用com.vaadin.server.StreamResource
. AStreamResource
提供了一些数据InputStream
并且可以在任何com.vaadin.server.Resource
期望 a 的地方使用(即链接、图像、图标...)。
以下示例方法StreamResource
为 a动态创建一个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);
有关更多信息,请参阅有关流资源的 Vaadin 文档。
于 2016-03-15T19:44:44.807 回答