使用透明像素保存javafx.scene.canvas

时间:2014-06-21 16:35:53

标签: java javafx-8

我试图写一个简单的" Paint"类JavaFX-Application。 我使用了JavaFX.scene.canvas,这非常有用。

现在我想将此画布保存为" .png"图片。可以工作,但透明像素与白色交换。

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

以下是我保存画布的方法:

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

1 个答案:

答案 0 :(得分:10)

问题是当您对画布进行快照时,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);