Friday, December 21, 2012

Retrieve color components from image

Retrieve color components from image
Retrieve color components from image


To retrieve various components from a Color object, call it's methods getRed(), getGreen(), getBlue(), getBrightness(), getHue(), getSaturation() and getOpacity()...

package testjavafx;

import javafx.application.Application;
import javafx.scene.Scene;
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 TestJavaFX extends Application {

@Override
public void start(Stage primaryStage) {

Image image = new Image("http://goo.gl/kYEQl");
ImageView imageView = new ImageView();
imageView.setImage(image);

PixelReader pixelReader = image.getPixelReader();

int width = (int)image.getWidth();
int height = (int)image.getHeight();

//Copy from source to destination pixel by pixel
WritableImage writableImage
= new WritableImage(width, height);
PixelWriter pixelWriter = writableImage.getPixelWriter();

WritableImage writableImageRed
= new WritableImage(width, height);
PixelWriter pixelWriterRed = writableImageRed.getPixelWriter();

WritableImage writableImageGreen
= new WritableImage(width, height);
PixelWriter pixelWriterGreen = writableImageGreen.getPixelWriter();

WritableImage writableImageBlue
= new WritableImage(width, height);
PixelWriter pixelWriterBlue = writableImageBlue.getPixelWriter();

WritableImage writableImageBrightness
= new WritableImage(width, height);
PixelWriter pixelWriterBrightness = writableImageBrightness.getPixelWriter();

WritableImage writableImageHue
= new WritableImage(width, height);
PixelWriter pixelWriterHue = writableImageHue.getPixelWriter();

WritableImage writableImageSaturation
= new WritableImage(width, height);
PixelWriter pixelWriterSaturation = writableImageSaturation.getPixelWriter();

WritableImage writableImageOpacity
= new WritableImage(width, height);
PixelWriter pixelWriterOpacity = writableImageOpacity.getPixelWriter();

for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
Color color = pixelReader.getColor(x, y);
pixelWriter.setColor(x, y, color);

double red = color.getRed();
double green = color.getGreen();
double blue = color.getBlue();
double brightness = color.getBrightness();
double hue = color.getHue()/360.0; //getHue() return 0.0-360.0
double saturation = color.getSaturation();
double opacity = color.getOpacity();

pixelWriterRed.setColor(x, y, new Color(red, 0.0, 0.0, 1.0));
pixelWriterGreen.setColor(x, y, new Color(0.0, green, 0.0, 1.0));
pixelWriterBlue.setColor(x, y, new Color(0.0, 0.0, blue, 1.0));

pixelWriterBrightness.setColor(x, y, new Color(brightness, brightness, brightness, 1.0));
pixelWriterHue.setColor(x, y, new Color(hue, hue, hue, 1.0));
pixelWriterSaturation.setColor(x, y, new Color(saturation, saturation, saturation, 1.0));
pixelWriterOpacity.setColor(x, y, new Color(opacity, opacity, opacity, 1.0));
}
}

ImageView destImageView = new ImageView();
destImageView.setImage(writableImage);
ImageView imageViewRed = new ImageView();
imageViewRed.setImage(writableImageRed);
ImageView imageViewGreen = new ImageView();
imageViewGreen.setImage(writableImageGreen);
ImageView imageViewBlue = new ImageView();
imageViewBlue.setImage(writableImageBlue);

ImageView imageViewBrightness = new ImageView();
imageViewBrightness.setImage(writableImageBrightness);
ImageView imageViewHue = new ImageView();
imageViewHue.setImage(writableImageHue);
ImageView imageViewSaturation = new ImageView();
imageViewSaturation.setImage(writableImageSaturation);
ImageView imageViewOpacity = new ImageView();
imageViewOpacity.setImage(writableImageOpacity);

HBox hBox = new HBox();
hBox.getChildren().addAll(imageView, destImageView,
imageViewRed, imageViewGreen, imageViewBlue,
imageViewBrightness, imageViewHue, imageViewSaturation, imageViewOpacity);

StackPane root = new StackPane();
root.getChildren().add(hBox);
Scene scene = new Scene(root, 400, 100);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}


Next:
- Adjust color components of red, green and blue of image

No comments:

Post a Comment