JavaFX преобразование WritableImage в изображение

Я делаю некоторое приложение, которое делает скриншот 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 ответов


использование:

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

моя задача была скопировать рисунок с холста, он будет копировать в WritableImage, чем получить изображение из WritableImage (для меня он справлялся с буфером обмена). Этот образ можно обрабатывать как угодно.

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