package javafx8image; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Slider; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.PixelReader; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; /** * * @web http://java-buddy.blogspot.com/ */ public class JavaFX8Image extends Application { Image imageSrc; Slider sliderHueShift; Slider sliderSaturationFactor; Slider sliderBrightnessFactor; Slider sliderOpacityFactor; ImageView imageViewDest; @Override public void start(Stage primaryStage) { imageSrc = new Image("http://goo.gl/kYEQl"); sliderHueShift = new Slider(0, 360, 0); sliderSaturationFactor = new Slider(0, 1, 1); sliderBrightnessFactor = new Slider(0, 1, 1); sliderOpacityFactor = new Slider(0, 1, 1); sliderHueShift.valueProperty().addListener(listener); sliderSaturationFactor.valueProperty().addListener(listener); sliderBrightnessFactor.valueProperty().addListener(listener); sliderOpacityFactor.valueProperty().addListener(listener); imageViewDest = new ImageView(); WritableImage imageDest = copyImage(imageSrc, sliderHueShift.getValue(), sliderSaturationFactor.getValue(), sliderBrightnessFactor.getValue(), sliderOpacityFactor.getValue()); imageViewDest.setImage(imageDest); VBox vBox = new VBox(); vBox.getChildren().addAll( new Label("hueShift"), sliderHueShift, new Label("saturationFactor"), sliderSaturationFactor, new Label("brightnessFactor"), sliderBrightnessFactor, new Label("opacityFactor"), sliderOpacityFactor, imageViewDest); StackPane root = new StackPane(); root.getChildren().addAll(vBox); Scene scene = new Scene(root, 640, 360); primaryStage.setTitle("java-buddy.blogspot.com"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } ChangeListener<Number> listener = new ChangeListener<Number>(){ @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { WritableImage imageDest = copyImage(imageSrc, sliderHueShift.getValue(), sliderSaturationFactor.getValue(), sliderBrightnessFactor.getValue(), sliderOpacityFactor.getValue()); imageViewDest.setImage(imageDest); } }; private WritableImage copyImage( Image src, double hueShift, double saturationFactor, double brightnessFactor, double opacityFactor) { PixelReader pixelReader = src.getPixelReader(); WritableImage dest = new WritableImage( (int) src.getWidth(), (int) src.getHeight()); PixelWriter pixelWriter = dest.getPixelWriter(); for (int y = 0; y < src.getHeight(); y++) { for (int x = 0; x < src.getWidth(); x++) { Color color = pixelReader.getColor(x, y); color = color.deriveColor( hueShift, saturationFactor, brightnessFactor, opacityFactor); pixelWriter.setColor(x, y, color); } } return dest; } }
Thursday, June 19, 2014
Color.deriveColor() example
Example of setting of hueShift, saturationFactor, brightnessFactor, opacityFactor in Color.deriveColor().
Wednesday, June 18, 2014
Various effect of creating Color with brighter(), darker(), saturate(), desaturate(), grayscale() and invert().
This example show various effect of creating Color when copying image, with brighter(), darker(), saturate(), desaturate(), grayscale() and invert().
package javafx8image; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.ListView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.PixelReader; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; /** * * @web http://java-buddy.blogspot.com/ */ public class JavaFX8Image extends Application { @Override public void start(Stage primaryStage) { Image imageSrc = new Image("http://goo.gl/kYEQl"); ListView listView = new ListView(); ImageView imageViewDest = new ImageView(); ObservableList<String> items = FXCollections.observableArrayList ( "NO", "brighter", "darker", "saturate", "desaturate", "grayscale", "invert"); listView.setItems(items); listView.getSelectionModel().selectedItemProperty().addListener( new ChangeListener<String>(){ @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { WritableImage imageDest = copyImage(imageSrc, (String)listView.getSelectionModel().getSelectedItem()); imageViewDest.setImage(imageDest); } }); WritableImage imageDest = copyImage(imageSrc, (String)listView.getSelectionModel().getSelectedItem()); imageViewDest.setImage(imageDest); HBox hBox = new HBox(); hBox.getChildren().addAll(imageViewDest, listView); StackPane root = new StackPane(); root.getChildren().addAll(hBox); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("java-buddy.blogspot.com"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } private WritableImage copyImage(Image src, String op) { PixelReader pixelReader = src.getPixelReader(); WritableImage dest = new WritableImage( (int) src.getWidth(), (int) src.getHeight()); PixelWriter pixelWriter = dest.getPixelWriter(); for (int y = 0; y < src.getHeight(); y++) { for (int x = 0; x < src.getWidth(); x++) { Color color = pixelReader.getColor(x, y); if(op!=null){ switch(op){ case "brighter": color = color.brighter(); break; case "darker": color = color.darker(); break; case "saturate": color = color.saturate(); break; case "desaturate": color = color.desaturate(); break; case "grayscale": color = color.grayscale(); break; case "invert": color = color.invert(); break; } } pixelWriter.setColor(x, y, color); } } return dest; } }
Tuesday, June 17, 2014
PixelReader, PixelWriter and WritableImage
Example to show how to copy image to WritableImage with PixelReader, PixelWriter.
Next:
- Various effect of creating Color with brighter(), darker(), saturate(), desaturate(), grayscale() and invert().
package javafx8image; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.PixelReader; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.input.MouseEvent; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; /** * * @web http://java-buddy.blogspot.com/ */ public class JavaFX8Image extends Application { @Override public void start(Stage primaryStage) { Button btn = new Button(); ImageView imageView = new ImageView(); ImageView imageViewDest = new ImageView(); Label label = new Label(); imageView.setOnMouseClicked(new EventHandler<MouseEvent>(){ @Override public void handle(MouseEvent event) { imageView.setImage(null); imageViewDest.setImage(null); label.setText(""); } }); btn.setText("Load image"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { Image image = new Image("http://goo.gl/kYEQl"); imageView.setImage(image); //copy image PixelReader pixelReader = image.getPixelReader(); WritableImage writableImage = new WritableImage( (int)image.getWidth(), (int)image.getHeight()); PixelWriter pixelWriter = writableImage.getPixelWriter(); for(int y=0; y<image.getHeight(); y++){ for(int x=0; x<image.getWidth(); x++){ Color color = pixelReader.getColor(x, y); color = color.brighter(); pixelWriter.setColor(x, y, color); } } imageViewDest.setImage(writableImage); label.setText(image.getWidth() + " x " + image.getHeight()); } }); VBox vBox = new VBox(); vBox.getChildren().addAll(btn, imageView, imageViewDest, label); StackPane root = new StackPane(); root.getChildren().addAll(vBox); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("java-buddy.blogspot.com"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
Next:
- Various effect of creating Color with brighter(), darker(), saturate(), desaturate(), grayscale() and invert().
Subscribe to:
Posts (Atom)