1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| private static boolean isGreenColor(Color color) {
int diff = 32;
boolean isRedFarFromGreen = (color.getGreen() - color.getRed() > diff);
boolean isBlueFarFromGreen = (color.getGreen() - color.getBlue() > diff);
boolean isRedNearBlue = (color.getRed() - color.getBlue() < diff) || (color.getBlue() - color.getRed() < diff);
return isBlueFarFromGreen && isRedFarFromGreen && isRedNearBlue;
}
private static Color changeHueColor(Color color, int teinte) {
float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[3]);
int newColor = Color.HSBtoRGB(0.45f, hsb[1], hsb[2]);
return new Color(newColor);
}
public static BufferedImage changeColor(BufferedImage sprite, int teinte) {
int tailleX = sprite.getWidth();
int tailleY = sprite.getHeight();
int pixel, newPixel;
Color pixelColor = null;
Color newPixelColor = null;
for(int i=0; i<tailleX; i++) {
for (int j=0; j<tailleY; j++) {
pixel = sprite.getRGB(i, j);
pixelColor = convertIntToColor(pixel);
if (isGreenColor(pixelColor)) {
teinte = ((teinte % 100) + 100) % 100;
newPixelColor = changeHueColor(pixelColor, teinte);
newPixel = convertColorToInt(newPixelColor);
sprite.setRGB(i, j, newPixel);
}
}
}
return sprite;
} |