3

我想在我的 Vaadin 应用程序中显示由某些 API(Canon Hack Development Kit 的 Java 库)返回的 BufferedImage,而不将其保存到文件系统中。这有可能吗?挥杆似乎并不麻烦,但到目前为止我还没有找到在 Vaadin 做到这一点的方法。

4

1 回答 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 回答