JavaFX将WritableImage转换为Image

时间:2013-12-19 08:38:18

标签: image javafx itext

我正在做一些应用程序,它会截取LineChart并将其保存为 pdf 。所以我不知道将WritableImage(JavaFX 2.2)转换为Image(iText lib)的顺畅方法。

我的临时解决方案是

  • 制作快照,然后
  • 从该快照中获取WritableImage
  • 将图像写入png文件
  • 打开图片并制作iText对象Image

我想做一些更改:我不想将png文件写入光盘,我只想将快照写入pdf。

我的临时解决方案是:

 WritableImage wim = new WritableImage((int) lineChart.getWidth(),(int) lineChart.getHeight());
 Scene scena = primaryStage.getScene();
 scena.snapshot(wim);

 File fileA = new File("C://Graphs/chart.png");
 try {
      ImageIO.write(SwingFXUtils.fromFXImage(wim, null), "png", fileA);
 }
 catch (Exception s) {
 }
 pdfDocument.add(preface3);
 com.itextpdf.text.Image graph =com.itextpdf.text.Image.getInstance("C://Graphs/chart.png");
 pdfDocument.add((com.itextpdf.text.Element) graph);        

2 个答案:

答案 0 :(得分:9)

使用:

ByteArrayOutputStream  byteOutput = new ByteArrayOutputStream();

ImageIO.write( SwingFXUtils.fromFXImage( wim, null ), "png", byteOutput );

com.itextpdf.text.Image  graph;
graph = com.itextpdf.text.Image.getInstance( byteOutput.toByteArray() );

答案 1 :(得分:0)

我的任务是从Canvas复制绘图,它将复制到WritableImage,而不是从WritableImage获取Image(对我而言,它正在处理剪贴板)。您可以根据需要处理此图像。

        WritableImage wi = new WritableImage((int)gc.getCanvas().getWidth(), 
                (int)gc.getCanvas().getHeight());
        gc.getCanvas().snapshot(null, wi); //Coping all that now in Canvas
        //gc is GraphicContext object from Canvas, it has drawing functions
        BufferedImage bi =SwingFXUtils.fromFXImage((Image)wi, null); 
        SwingFXUtils.toFXImage(bi, (WritableImage)image);