2016-11-30 2 views
0

Я создал участок на Canvas. Теперь я хочу добавить изображение в файл Excel.Загрузить изображение холста в Excel

Я знаю, как получить WritableImage от Canvas, и я знаю, что мне нужно InputStream написать образ в Excel с addPicture(). Проблема в том, как связать эти два.

Я могу сохранить это изображение в файле, а затем открыть его и загрузить в Excel, но, возможно, есть способ избежать этого?

+0

вместо записи в файл с помощью ImageIO.write() вы также можете написать ByteArrayOutputStream. Затем вы можете добавить изображение через addPicture (новый ByteArrayInputStream (байты ByteArrayOutputStream)) в книгу – kiwiwings

ответ

0

Вы можете использовать PipedInputStream/PipedOutputStream для достижения этой цели:

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); 
} 

или вы могли бы записать данные в массив с помощью ByteArrayOutputStream:

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);