2012-06-04 40 views
3

我只是創建一個類,讓我使用ColorAjust Class修改圖像,如飽和度亮度,對比度和色調。javafx 2.1如何使用ColorAdjust修改後保存圖像

但我不知道如何保存該圖像進行這些修改後。

下面是代碼:

final Stage imageProcessStage = new Stage(); 
     imageProcessStage.initModality(Modality.APPLICATION_MODAL); 
     imageImageProcess = new Image(ImagePathImageProcess); 
     imageViewImageProcess = ImageViewBuilder.create().image(imageImageProcess).build(); 
     ColorAdjust colorAdjust = ColorAdjustBuilder.create().build(); 
     imageViewImageProcess.setEffect(colorAdjust); 
     // 
     Label saturationLabel = LabelBuilder.create().text("Saturation").build(); 
     GridPane.setConstraints(saturationLabel, 0, 0); 
     Slider saturationSlider = SliderBuilder.create().value(50).build(); 
     colorAdjust.saturationProperty().bind(saturationSlider.valueProperty().divide(50).subtract(1)); 
     GridPane.setConstraints(saturationSlider, 1, 0); 
     GridPane.setHgrow(saturationSlider, Priority.ALWAYS); 
     Label saturationValueLabel = LabelBuilder.create().minWidth(75).maxWidth(75).build(); 
     saturationValueLabel.textProperty().bind(colorAdjust.saturationProperty().multiply(100).asString("%.2f%%")); 
     GridPane.setConstraints(saturationValueLabel, 2, 0); 
     // 
     Label hueLabel = LabelBuilder.create().text("Hue").build(); 
     GridPane.setConstraints(hueLabel, 0, 1); 
     Slider hueSlider = SliderBuilder.create().value(50).build(); 
     colorAdjust.hueProperty().bind(hueSlider.valueProperty().divide(50).subtract(1)); 
     GridPane.setConstraints(hueSlider, 1, 1); 
     GridPane.setHgrow(hueSlider, Priority.ALWAYS); 
     Label hueValueLabel = LabelBuilder.create().minWidth(75).maxWidth(75).build(); 
     hueValueLabel.textProperty().bind(colorAdjust.hueProperty().multiply(100).asString("%.2f%%")); 
     GridPane.setConstraints(hueValueLabel, 2, 1); 
     // 
     Label brightnessLabel = LabelBuilder.create().text("Brightness").build(); 
     GridPane.setConstraints(brightnessLabel, 0, 2); 
     Slider brightnessSlider = SliderBuilder.create().value(50).build(); 
     colorAdjust.brightnessProperty().bind(brightnessSlider.valueProperty().divide(50).subtract(1)); 
     GridPane.setConstraints(brightnessSlider, 1, 2); 
     GridPane.setHgrow(brightnessSlider, Priority.ALWAYS); 
     Label brightnessValueLabel = LabelBuilder.create().minWidth(75).maxWidth(75).build(); 
     brightnessValueLabel.textProperty().bind(colorAdjust.brightnessProperty().multiply(100).asString("%.2f%%")); 
     GridPane.setConstraints(brightnessValueLabel, 2, 2); 
     // 
     Label contrastLabel = LabelBuilder.create().text("Contrast").build(); 
     GridPane.setConstraints(contrastLabel, 0, 3); 
     Slider contrastSlider = SliderBuilder.create().value(50).build(); 
     colorAdjust.contrastProperty().bind(contrastSlider.valueProperty().divide(50).subtract(1)); 
     GridPane.setConstraints(contrastSlider, 1, 3); 
     GridPane.setHgrow(contrastSlider, Priority.ALWAYS); 
     Label contrastValueLabel = LabelBuilder.create().minWidth(75).maxWidth(75).build(); 
     contrastValueLabel.textProperty().bind(colorAdjust.contrastProperty().multiply(100).asString("%.2f%%")); 
     GridPane.setConstraints(contrastValueLabel, 2, 3); 

     //Validate Button 
     Button btnValider = new Button("Valider"); 
     btnValider.setOnAction(new EventHandler<ActionEvent>() { 

      public void handle(ActionEvent event) { 

       // SAVE IMAGE HERE 

      } 
     }); 

回答

2

升級到JavaFX 2.2,並在你的按鈕事件處理程序使用下面的代碼。

ImageIO.write(
    SwingFXUtils.fromFXImage(
    imageViewImageProcess.snapshot(null, null), null 
), 
    "png", 
    new File("valider.png") 
); 

注意,2.2是目前在開發者預覽版,而不是一個GA的產品,所以你可能會遇到的一些問題和錯誤,直到新的2.2的方法已經徹底QAed。

下面是一個完整的,可執行的例子:https://gist.github.com/2870355

+0

THKS你的努力,但有另一種方式做,在JavaFX的2.1,因爲我在2.2版本中遇到很多問題,比如有很多bug的TreeView。 Thks – user1428194

+0

請參閱http://www.aljoscha-rittner.de/blog/archive/2011/03/09/javafxdev-screen-capture-tool-with-200-lines-and-500ms-startup-time/ – jewelsea

2

通用和代碼的簡化版本:

private void saveImage(
    Image i, 
    String extension, 
    String pathname) 
throws IOException { 

ImageIO.write(
    SwingFXUtils.fromFXImage(
     image, 
     null), 
    extension, 
    new File(
     pathname)); 
} 
相關問題