我正在尝试编写一个简单的"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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Stu*_*rks 10
问题是当您对画布进行快照时,第一个参数为snapshotis 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |