2016-11-30 4 views
0

Ich erstellte eine Handlung auf Canvas. Jetzt möchte ich das Bild zu einer Excel-Datei hinzufügen.Leinwandbild in Excel laden

Ich weiß, wie ein WritableImage von Canvas zu bekommen, und ich weiß, dass ich ein InputStream benötigen ein Bild in Excel mit addPicture() zu schreiben. Das Problem ist, wie man diese zwei verbindet.

Ich könnte dieses Bild in Datei speichern und dann öffnen und in Excel laden, aber vielleicht gibt es eine Möglichkeit, dies zu vermeiden?

+0

statt über ImageIO.write Schreiben in eine Datei() Sie können auch ByteArrayOutputStream schreiben. Als nächstes können Sie das Bild über addPicture (neues ByteArrayInputStream (Bytes des ByteArrayOutputStream)) zur Arbeitsmappe hinzufügen – kiwiwings

Antwort

0

könnten Sie verwenden ein PipedInputStream/PipedOutputStream dies zu erreichen:

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

oder Sie können die Daten in ein Array schreiben ByteArrayOutputStream mit:

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