2016-11-30 107 views
0

我在Canvas上創建了一個圖。現在我想將圖像添加到Excel文件。將畫布圖像加載到Excel中

我知道如何從Canvas得到WritableImage,我知道我需要一個InputStream用Excel編寫圖像addPicture()。問題是如何鏈接這兩個。

我可以將該圖像保存到文件,然後打開並將其加載到Excel,但也許有一種方法可以避免這種情況?

+0

而不是通過ImageIO.write寫入文件()你也可以寫入ByteArrayOutputStream。接下來,您可以通過addPicture(new ByteArrayInputStream(ByteArrayOutputStream的字節))將圖片添加到工作簿 – kiwiwings

回答

0

你可以使用一個PipedInputStream/PipedOutputStream來實現:使用ByteArrayOutputStream

Image image = ... 
BufferedImage bImage = SwingFXUtils.fromFXImage(image, null); 

PipedOutputStream pos; 
try (PipedInputStream pis = new PipedInputStream()) { 
    pos = new PipedOutputStream(pis); 
    new Thread(() -> { 
     try { 
      ImageIO.write(bImage, "png", pos); 
     } catch (IOException ex) { 
      throw new IllegalStateException(ex); 
     } 
    }).start(); 
    workbook.addPicture(pis, Workbook.PICTURE_TYPE_PNG); 
} catch (IOException ex) { 
    throw new IllegalStateException(ex); 
} 

,或者你可以將數據寫入到陣列:

Image image = ... 
BufferedImage bImage = SwingFXUtils.fromFXImage(image, null); 

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
try { 
    ImageIO.write(bImage, "png", bos); 
} catch (IOException ex) { 
    throw new IllegalStateException(ex); 
} 
workbook.addPicture(bos.toByteArray(), Workbook.PICTURE_TYPE_PNG);