2013-12-19 2 views
5

Я делаю приложение, которое делает снимок экрана LineChart и сохраняет его до pdf. Поэтому я не знаю, как конвертировать WritableImage (JavaFX 2.2) в Image (iText lib).JavaFX Convert WritableImage to Image

Мое временное решение

  • , чтобы сделать снимок, а затем
  • получить 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);   
+0

Я должен делать то же самое, я делаю вещи, как и вы, потому что я не нахожу лучшего решения на данный момент =/ –

+0

Как я уже сказал, это только мое временное solutin, becaus мне нужно это si, я могу перейти к следующей задаче. – wanttobeprofessional

ответ

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

Благодарю вас, я бы вам посоветовал, но я не могу сказать, что у меня недостаточно репутации. – wanttobeprofessional

0

Моя задача была копия рисунок из холста, он будет копировать 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); 
+0

Забыл, «образ» - ваш объект изображения –

+0

java.lang.ClassCastException: javafx.scene.image.Image нельзя отнести к javafx.scene.image.WritableImage – VirgileD