2014-06-21 61 views
4

我正在嘗試編寫一個簡單的「Paint」式JavaFX應用程序。 我吸取了一個JavaFX.scene.canvas,這工作得很好。用透明像素保存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(); 
     } 
    } 
} 

回答

9

的問題是,當你快照畫布中,第一個參數是snapshotnull,這意味着默認SnapshotParameters使用。特別是,整個目標圖像首先填充了SnapshotParameter的填充值。由於參數爲空,因此缺省填充值爲空,這意味着填充值(請參閱SnapshotParameters.setFill)爲白色。

爲了解決這個問題,只需要創建一個SnapshotParameters對象,設置其填充到透明,並用它在調用snapshot

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