Bonjour,
je voudrais obtenir chaque couleur par pixel d’une image que j’uploade.
J’ai utilisé 2 méthodes : une avec un bufferedImage et une autre avec le PixelGrabber, mais aucune des deux n’a l’air de marcher; car je n’obtiens pas les bonnes couleurs ( en entrée du N/B et ça m’affiche que j’ai du bleu ). Voici mon code, ce sera plus simple :
private int width;
private int height;
private Image myImage;
private Object pixels;
private int nbColors = 0;
private ColorModel colorModelImage;
private String getTextOfPmbFromImgTest3(String pathImage){
//On crée l'image à partir du path
myImage = new ImageIcon(pathImage).getImage();
//Remplit les données essentielles pour les pixels
fillPixels();
//Remplissage des lignes
String textPmb = "debut";
textPmb += width+"\n";
textPmb += height+"\n";
int indexPixel = 0;
//valeur de la couleur 1 pour noir, 0 pour blanc
int valueColor = 0;
for(int indexLigne=0;indexLigne<width;indexLigne++){
valueColor = 0;
for(int indexCol=0;indexCol<height;indexCol++){
//convertit la couleur
valueColor += getColor(indexPixel);
indexPixel++;
}
textPmb += valueColor + "\n";
System.out.println("indexLigne = "+indexLigne);
}
System.out.println("textPmb = "+textPmb);
return textPmb;
}
/**
* Remplit les pixels
*
*/
private void fillPixels(){
width = myImage.getWidth(this);
height = myImage.getHeight(this);
//on construit le grabber
PixelGrabber pixelgrabber = new PixelGrabber(myImage,0,0,width,height,false);
try {
pixelgrabber.grabPixels();
} catch (InterruptedException e) {
e.printStackTrace();
}
//Obtention des pixels
pixels = (Object) pixelgrabber.getPixels();
System.out.println("pixels.getClass() = "+pixels.getClass());
colorModelImage = pixelgrabber.getColorModel();
if(!(colorModelImage instanceof IndexColorModel)){
System.out.println("ce n'est pas un fichier indexé ( ie ce n'est pas un gif");
}
else {
nbColors = ((IndexColorModel)colorModelImage).getMapSize();
}
}
//donne la couleur avec la rouge, vert et bleu
private int getColor(int pixel){
int color =0;
color = getRed(pixel) + getGreen(pixel) + getBlue(pixel);
return color;
}
//Couleurs RGB
//vert
private int getGreen(int pixel){
if(colorModelImage instanceof IndexColorModel){
return ((IndexColorModel)colorModelImage).getGreen(pixel);
}
else {
return ((DirectColorModel) colorModelImage).getGreen(pixel);
}
}
//rouge
private int getRed(int pixel){
if(colorModelImage instanceof IndexColorModel){
return ((IndexColorModel)colorModelImage).getRed(pixel);
}
else {
return ((DirectColorModel) colorModelImage).getRed(pixel);
}
}
//bleu
private int getBlue(int pixel){
if(colorModelImage instanceof IndexColorModel){
return ((IndexColorModel)colorModelImage).getBlue(pixel);
}
else {
return ((DirectColorModel) colorModelImage).getBlue(pixel);
}
}
}
En entrée je lui mets une photo en N/B, je devrais n’avoir que du 0,0,0 et du 255,255,255 normalement, et en fait j’ai du 0,0,i pour i variant de 0 à widht*height
Est ce que je gère mal le tableau de pixels ?
Merci