Get color of each pixel of an image using BufferedImages

user2410644 picture user2410644 · Mar 13, 2014 · Viewed 71.3k times · Source

I am trying to get every single color of every single pixel of an image. My idea was following:

int[] pixels;
BufferedImage image;

image = ImageIO.read(this.getClass.getResources("image.png");
int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();

Is that right? I can't even check what the "pixels" array contains, because i get following error:

java.awt.image.DataBufferByte cannot be cast to java.awt.image.DataBufferInt

I just would like to receive the color of every pixel in an array, how do i achieve that?

Answer

Black Shadow picture Black Shadow · Mar 13, 2014
import java.io.*;
import java.awt.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

public class GetPixelColor {
    public static void main(String args[]) throws IOException {
        File file = new File("your_file.jpg");
        BufferedImage image = ImageIO.read(file);
        // Getting pixel color by position x and y 
        int clr = image.getRGB(x, y);
        int red =   (clr & 0x00ff0000) >> 16;
        int green = (clr & 0x0000ff00) >> 8;
        int blue =   clr & 0x000000ff;
        System.out.println("Red Color value = " + red);
        System.out.println("Green Color value = " + green);
        System.out.println("Blue Color value = " + blue);
    }
}

of course you have to add a for loop for all pixels