# Java I need help about how to get a pixel value in Java

#### ohaited

Greetings!

Hey guys, I need help on how can I get pixel value of an image with pixels more than 100px (10x10).

Here the code that I execute in order to get the pixel value

Java:
try{
File f = new File ("input image location");
}catch(IOException e){
System.out.println(e);
}

//get image width and height
int width = img.getWidth();
int height = img.getHeight();
int count=0;
for(int i=0; i<height; i++){

for(int j=0; j<width; j++){
count++;
//get pixel value
Color c = new Color(img.getRGB(j, i));
int p = img.getRGB(j, i);
//get alpha
int a = (p >> 24) & 0xff;
//get red
int r = (p >>16) & 0xff;
//get green
int g = (p >> 8) & 0xff;
//get blue
int b = (p >>0) & 0xff;
System.out.print("No. "+count);
System.out.println("Value of Alpha: "+a+ " Value of Red: "+r+" Value of Green: "+g+" Value of Blue: "+b+"");

p = (a<<24) | (r<<16) | (g<<8) | b;
System.out.println("Value of Pixel in Binary Presentation"+p);

img.setRGB(j, i, p);

try{
f = new File("output image location");
ImageIO.write(img, "png", f);

}catch(IOException e){
System.out.println(e);
}

}
}

Actually I've tried this code for an image with 100px (10x10). And the value that I've got is quite good. But if I try with an image more than 100px it will not produce any output.

The only output I receive as i attached below
Hope you guys can help me out. Thank you in advance

Last edited by a moderator:
Related Programming and Computer Science News on Phys.org

#### Borg

Gold Member
int p = img.getRGB(j, i);
It looks like you're building RGB values from the image position. Since RGB values have a finite max value, your code exceeds that value for larger images.

#### ohaited

It looks like you're building RGB values from the image position. Since RGB values have a finite max value, your code exceeds that value for larger images.
Oh i see, so is there any alternative I can use to get the RGB values for a larger image that 100px? If you have any suggestion I could use

#### Borg

Gold Member
If you still want to use the image position, you could use the remainder of a modulus check to set the values. That way it resets itself when it gets too big. Of course the colors will suddenly change on the screen where that happens.

#### ohaited

If you still want to use the image position, you could use the remainder of a modulus check to set the values. That way it resets itself when it gets too big. Of course the colors will suddenly change on the screen where that happens.
Erm it's a bit blurry for me to understand. Can you clear me out using codes or references?

#### Borg

Gold Member
Do you know what the modulus function is?

#### ohaited

Do you know what the modulus function is?
Yup, I know how the modulus function works. But I don't know where to implement the modulus function in order to reset itself

#### Borg

Gold Member
Right where I showed you that it was breaking. Instead of using i and j directly, replace those values with the modulus of i and the modulus of j.

#### ohaited

Right where I showed you that it was breaking. Instead of using i and j directly, replace those values with the modulus of i and the modulus of j.
Oh I see, so after I do the looping, and just modulus the value of i and j before I want to getRGB(),
Java:
  for(int j=0; j<width; j++){
count++;
//get pixel value
Color c = new Color(img.getRGB(j, i));
int p = img.getRGB(j, i);
//get alpha
int a = (p >> 24) & 0xff;
//get red
int r = (p >>16) & 0xff;
//get green
int g = (p >> 8) & 0xff;
//get blue
int b = (p >>0) & 0xff;

is it right?

Gold Member

#### ohaited

Good question erm haven't figure it out yet

#### Borg

Gold Member
That's OK. You're here to learn. You're going to want to replace the values of i and j after the count++ line with new variables that are based on the modulus values of i and j. Does that make sense?

#### ohaited

That's OK. You're here to learn. You're going to want to replace the values of i and j after the count++ line with new variables that are based on the modulus values of i and j. Does that make sense?

Yeah mate, I'm kinda new here. It kinda make sense to me. So should i do this?

Java:
   int k = i % j;
Erm.. does it work? Or it doesn't help at all?

#### Borg

Gold Member
No, you want two new variables. For i, you want to 'modulate' the value to not exceed the max RGB value.

#### ohaited

No, you want two new variables. For i, you want to 'modulate' the value to not exceed the max RGB value.
So i should modulus both variables with odd number or even number ? and it looks like this?

Code:
   int k = i % 2;
int l = j % 2;

#### Borg

Gold Member
Closer. Instead of 2, you want the max value for an RGB color.

#### ohaited

Closer. Instead of 2, you want the max value for an RGB color.
So it would be..?

Gold Member

#### ohaited

Gee thanks! Hahahaha will work on it and I'll let you know then!

#### Borg

Gold Member
OK, good luck. I'm sure that you have what you need now.

"I need help about how to get a pixel value in Java"

### Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving