Salut,
Qu'est-ce que cette histoire de classe ? Tu parles de couleur, pas de classe, non ?
Pour pouvoir compter le nombre de points par couleur, il faudrait stocker autant de compteurs que de couleurs dans l'image. Comme on ne connait pas le nombre de couleurs d'avance, et que définir autant de compteur que de couleurs possibles est innenvisageable, on va faire des compteurs pour les couleurs qui se trouvent dans l'image. Le plus simple pour faire ça est d'utiliser une Map.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public static Map<Color, Integer> getNombreDePointsParCouleur(BufferedImage image) {
final Map<Color, Integer> map = new HashMap<>();
// on parcourt tous les pixels de l'image
for(int i=0; i<image.getWidth(); i++) {
for(int j=0; j<image.getHeight(); j++) {
Color color = new Color(image.getRGB(i, j)); // on calcule la couleur correspondant au pixel en forçant la composante alpha à 255
if ( map.containsKey(color) ) { // si la couleur est déjà dans la map
map.put(color, map.get(color)+1); // on incrémente
}
else {
map.put(color, 1); // sinon on initialise à 1
}
}
}
return map;
} |
Ou en utilisant une expression lambda :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public static Map<Color, Integer> getNombreDePointsParCouleur(BufferedImage image) {
final Map<Color, Integer> map = new HashMap<>();
for(int i=0; i<image.getWidth(); i++) {
for(int j=0; j<image.getHeight(); j++) {
map.compute(new Color(image.getRGB(i, j)), (color, nb)-> nb==null?1:nb++);
}
}
return map;
} |
Ensuite, on peut appeler la méthode :
Map<Color, Integer> colors = getNombreDePointsParCouleur(image);
Pour connaître le nombre de couleurs différentes :
System.out.println(colors.size());
Afficher la liste des couleurs :
System.out.println(colors.keySet());
Afficher le nombre de point Rouge #FF0000
System.out.println(colors.getOrDefault(Color.RED, 0));
Partager