Reputation: 449
I have a getPixelColour
function:
Color getPixelColor(int x, int y) {
if(mazeImage == null) System.out.println(":(");
int pixel = mazeImage.getRGB(x, y);
int red = (pixel & 0x00ff0000) >> 16;
int green = (pixel & 0x0000ff00) >> 8;
int blue = pixel & 0x000000ff;
return new Color(red,green,blue);
}
For example a pixel is black, and System.out.println(getPixelColor(x,y) + " " + Color.BLACK);
writes java.awt.Color[r=0,g=0,b=0] java.awt.Color[r=0,g=0,b=0]
But getPixelColor(x,y) == Color.BLACK
returns false
. What's wrong with it?
Upvotes: 2
Views: 367
Reputation: 13116
Instead of using getPixelColor(x, y) == Color.BLACK
try
Color.BLACK.equals(getPixelColor(x, y))
You should also read up on the equals
method in Java and when it is appropriate to use it vs. the ==
operator.
Upvotes: 4
Reputation: 66233
Color
is an object and ==
compares not the contents of the objects but the instances. So there can be several Color
objects containing the RGB values (0,0,0).
You want to compare with col1.equals(col2)
.
You might look around this site and find plenty of other questions regaring ==
and equals
. As an example:
Upvotes: 2
Reputation: 122336
You are comparing two different Color
objects which will return false (i.e., two different objects at different memory locations).
If you wish to properly compare them, use equals()
:
getPixelColor(x, y).equals(Color.BLACK);
Upvotes: 4
Reputation: 28059
If you do
getPixelColor(x,y).equals(Color.BLACK);
I'm sure you will get the result you expect.
The ==
operator in java is reference equality, and since getPixelColor()
returns a new instance of Color
it'll never ==
to Color.BLACK
as this a static reference to another instance that happens to be the colour black.
Upvotes: 2