JavaFX如何将WritableImage转换为Image

5
我正在开发一个应用程序,该应用程序可以截取LineChart的屏幕截图,并将其保存为pdf文件。我不知道如何平滑地将WritableImage(JavaFX 2.2)转换为库中的Image
我的临时解决方案是:
  1. 进行快照
  2. 从快照中获取WritableImage
  3. 将图像写入png文件
  4. 打开图片并创建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);        

我必须做同样的事情,我正在做像你一样的东西,因为目前我找不到更好的解决方案 =/ - agonist_
就像我说的,这只是我的临时解决方案,因为我需要它才能进行下一个任务。 - IndexOutOfDevelopersException
2个回答

8

使用:

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

谢谢你,我想给你投票,但是我没有足够的声望。 - IndexOutOfDevelopersException

0
我的任务是从画布上复制图像,将其复制到可写图像中,然后从可写图像中获取图像(对我来说是复制到剪贴板)。你可以随意处理这个图像。
        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);

忘记了,“image”是您的图像对象。 - Роман Лева
java.lang.ClassCastException: javafx.scene.image.Image无法转换为javafx.scene.image.WritableImage - VirgileD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接