0
我在Canvas
上創建了一個圖。現在我想將圖像添加到Excel文件。將畫布圖像加載到Excel中
我知道如何從Canvas
得到WritableImage
,我知道我需要一個InputStream
用Excel編寫圖像addPicture()
。問題是如何鏈接這兩個。
我可以將該圖像保存到文件,然後打開並將其加載到Excel,但也許有一種方法可以避免這種情況?
我在Canvas
上創建了一個圖。現在我想將圖像添加到Excel文件。將畫布圖像加載到Excel中
我知道如何從Canvas
得到WritableImage
,我知道我需要一個InputStream
用Excel編寫圖像addPicture()
。問題是如何鏈接這兩個。
我可以將該圖像保存到文件,然後打開並將其加載到Excel,但也許有一種方法可以避免這種情況?
你可以使用一個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);
而不是通過ImageIO.write寫入文件()你也可以寫入ByteArrayOutputStream。接下來,您可以通過addPicture(new ByteArrayInputStream(ByteArrayOutputStream的字節))將圖片添加到工作簿 – kiwiwings