JavaFX如何将WritableImage转换为Image

转载自  JavaFX如何将WritableImage转换为Image

我正在做一些应用程序,制作截图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); 

用途:

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 `BufferedImage` 转换为 `WritableImage`,可以按照以下步骤进行操作: 1. 创建一个 `WritableImage` 对象,它的宽度和高度与 `BufferedImage` 相同。 ```java WritableImage wImage = new WritableImage(bufferedImage.getWidth(), bufferedImage.getHeight()); ``` 2. 获取 `WritableImage` 的像素写入器,用于将像素数据从 `BufferedImage` 传输到 `WritableImage` 中。 ```java PixelWriter writer = wImage.getPixelWriter(); ``` 3. 将 `BufferedImage` 的像素数据转换为 `javafx.scene.paint.Color` 对象,并将其写入到 `WritableImage` 中。 ```java for (int x = 0; x < bufferedImage.getWidth(); x++) { for (int y = 0; y < bufferedImage.getHeight(); y++) { int argb = bufferedImage.getRGB(x, y); Color color = Color.rgb((argb >> 16) & 0xff, (argb >> 8) & 0xff, argb & 0xff, (argb >> 24) & 0xff); writer.setColor(x, y, color); } } ``` 完整的代码如下所示: ```java import java.awt.image.BufferedImage; import javafx.embed.swing.SwingFXUtils; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.paint.Color; public class BufferedImageToWritableImage { public static WritableImage convert(BufferedImage bufferedImage) { WritableImage wImage = new WritableImage(bufferedImage.getWidth(), bufferedImage.getHeight()); PixelWriter writer = wImage.getPixelWriter(); for (int x = 0; x < bufferedImage.getWidth(); x++) { for (int y = 0; y < bufferedImage.getHeight(); y++) { int argb = bufferedImage.getRGB(x, y); Color color = Color.rgb((argb >> 16) & 0xff, (argb >> 8) & 0xff, argb & 0xff, (argb >> 24) & 0xff); writer.setColor(x, y, color); } } return wImage; } public static void main(String[] args) { BufferedImage bufferedImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB); WritableImage wImage = convert(bufferedImage); // Do something with the WritableImage... } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值