The getRGB method returns a single int. How can I get individually the red, green and blue colors all as values between 0 and 255?
Java's Color class can do the conversion:
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
You'll need some basic binary arithmetic to split it up:
int blue = rgb & 0xFF;
int green = (rgb >> 8) & 0xFF;
int red = (rgb >> 16) & 0xFF;
(Or possibly the other way round, I honestly can't remember and the documentation isn't giving me an instant answer)
A pixel is represented by a 4-byte (32 bit) integer, like so:
00000000 00000000 00000000 11111111
^ Alpha ^Red ^Green ^Blue
So, to get the individual color components, you just need a bit of binary arithmetic:
int rgb = getRGB(...);
int red = (rgb >> 16) & 0x000000FF;
int green = (rgb >>8 ) & 0x000000FF;
int blue = (rgb) & 0x000000FF;
This is indeed what the java.awt.Color
class methods do:
553 /**
554 * Returns the red component in the range 0-255 in the default sRGB
555 * space.
556 * @return the red component.
557 * @see #getRGB
558 */
559 public int getRed() {
560 return (getRGB() >> 16) & 0xFF;
561 }
562
563 /**
564 * Returns the green component in the range 0-255 in the default sRGB
565 * space.
566 * @return the green component.
567 * @see #getRGB
568 */
569 public int getGreen() {
570 return (getRGB() >> 8) & 0xFF;
571 }
572
573 /**
574 * Returns the blue component in the range 0-255 in the default sRGB
575 * space.
576 * @return the blue component.
577 * @see #getRGB
578 */
579 public int getBlue() {
580 return (getRGB() >> 0) & 0xFF;
581 }
For simple color manipulations, you can use
bufImg.getRaster().getPixel(x,y,outputChannels)
The outputChannels is an array for storing the fetched pixel. Its length depends on your image's actual channel count. For example, an RGB image has 3 channels; and an RGBA image has 4 channels.
This method has 3 output types: int, float and double. To get a color value ranges from 0~255, your actual parameter outputChannels should be an int[] array.