在Vaadin中显示BufferedImage

时间:2016-03-15 14:41:10

标签: vaadin bufferedimage chdk

我希望在我的Vaadin应用程序中显示由某些API(适用于Canon Hack Development Kit的Java库)返回的BufferedImage,而不将其保存到文件系统中。这有可能吗?它似乎没有什么麻烦,但我到目前为止在Vaadin找不到任何办法。

1 个答案:

答案 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文档。