gpt4 book ai didi

java - 保存具有透明像素的 javafx.scene.canvas

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:03 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的“Paint”类 JavaFX 应用程序。我在 JavaFX.scene.canvas 上绘图,效果很好。

现在我想将此 Canvas 保存为“.png”图像。有效,但透明像素与白色像素交换。

如何将透明像素保存为透明像素?

下面是我如何保存 Canvas :

private void saveFile(){
FileChooser fc = new FileChooser();
fc.setInitialDirectory(new File("res/maps"));
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("PNG","*.png"));
fc.setTitle("Save Map");
File file = fc.showSaveDialog(primaryStage);
if(file != null){
WritableImage wi = new WritableImage((int)WIDTH,(int)HEIGHT);
try { ImageIO.write(SwingFXUtils.fromFXImage(canvas.snapshot(null,wi),null),"png",file);
} catch (IOException e) {
e.printStackTrace();
}
}
}

最佳答案

问题是,当您对 Canvas 进行快照时,snapshot 的第一个参数是 null,这意味着使用默认的 SnapshotParameters。特别是,整个目标图像首先用 SnapshotParameter 的填充值填充。由于参数为 null,因此默认填充值为 null,这意味着填充值(参见 SnapshotParameters.setFill)为白色。

要解决此问题,只需创建一个 SnapshotParameters 对象,将其填充设置为透明,然后在调用 snapshot 时使用它:

    SnapshotParameters sp = new SnapshotParameters();
sp.setFill(Color.TRANSPARENT);
...
ImageIO.write(SwingFXUtils.fromFXImage(canvas.snapshot(sp, wi), null), "png", file);

关于java - 保存具有透明像素的 javafx.scene.canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24343657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com