2016-11-30 22 views
0

Canvasにプロットを作成しました。今度は、イメージをExcelファイルに追加したいと思います。キャンバス画像をExcelに読み込む

私はWritableImageCanvasから取得する方法を知っていて、addPicture()で画像を書き込むにはInputStreamが必要です。問題は、これらの2つをリンクする方法です。

私はこのイメージをファイルに保存し、それを開いて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); 
関連する問題