Hashmap....

Lebowskijul Messages postés 3 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 4 janvier 2005 - 30 déc. 2004 à 14:29
Lebowskijul Messages postés 3 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 4 janvier 2005 - 4 janv. 2005 à 21:40
Salut.

J'ai un projet à réaliser dans le cadre de mes études : je dois trier les différentes couleurs d'une image, les classer dans une table et répertorier le nombre de pixels pour chaque couleur. J'ai utilisé une hashset pour éliminer les doublons, et je voudrais reparcourir l'image pour compter le nombre de fois qu'apparait chaque couleur et ranger tout ça dans une hashmap (je suis pas sûr). La clé correspondera au couleurs et la valeur sera le nombre de points trouvé pour cette couleur.

Le problème est que je n'arrive pas à récupérer les couleurs mises dans la hashset pour les mettre dans la hashmap ! J'aimerai savoir si quelqu'un pourrait m'aider !! :)

PS : je débute dans le java et je sais pas si tout ce que j'ai dit est possible !

3 réponses

Lebowskijul Messages postés 3 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 4 janvier 2005
30 déc. 2004 à 14:50
J'ai oublié de mettre mon code !

/**
*
* Projet de java
*
* @author Marcucci Olivier & Poilbout Julien
* @version 1.0
*
*/

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.applet.*;
import java.awt.*;
import java.util.Set;
import java.util.HashSet;
import java.util.HashMap;
import javax.imageio.ImageIO;

import com.sun.jimi.core.Jimi;

public class Projet {

/**
* Classe work
*
* @param inImage
* @param outFile
*/

public static void work(String inImage)
{
Image img = Jimi.getImage(inImage);

int red,green,blue;
int w = img.getWidth(null);
int h = img.getHeight(null);

int[] pixels = new int[w * h];

PixelGrabber pg = new PixelGrabber(img, 0, 0, w, h, pixels, 0, w);

try {
pg.grabPixels();
} catch (InterruptedException e)
{
System.err.println("interrupted waiting for pixels!");
}

if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
System.err.println("image fetch aborted or errored");
}

for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {

red = getRed(pixels[(i * w) + j]);

System.out.println("rouge" +red);

green = getGreen(pixels[(i * w) + j]);

System.out.println("vert" +green);

blue = getBlue(pixels[(i * w) + j]);

System.out.println("bleu" +blue);

Color couleur = new Color(red,green,blue);

// Table contenant chaque couleur du dessin

Set table = new HashSet();

table.add(couleur);

table.size();

System.out.println("set" +table);

}
}

System.out.println("set" +table);

// Table qui permet de classer chaque couleur avec un indice clé

HashMap tab = new HashMap();

Integer cle ;

//tab.put(cle,couleur);

}

private static int getRed(int pixel)
{
int red = (pixel >> 16) & 0xff;
return red;
}

private static int getGreen(int pixel)
{
int green = (pixel >> 8) & 0xff;
return green;
}

private static int getBlue(int pixel)
{
int blue = (pixel) & 0xff;
return blue;
}

public static void main(String[] args)
{
System.out.println("start:"+new java.util.Date());
String prefix = "c:\\travail\";
String in = prefix + "a.bmp";

Projet.work(in);

System.out.println("end:"+new java.util.Date());
}

// public class Couleur extends Project{
//}

}
0
jef_b Messages postés 28 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 2 juin 2005
4 janv. 2005 à 12:19
Hi !

Bon j'ai quelques petites remarques qui, je l'espère pourront t'aider...
Parcourir l'image deux fois n'est pas nécessaire (enfin a priori)
En parcourant ton image pour recenser les différentes couleurs, il faut que tu les comptes en même temps. A mon avis il faut utiliser directement la HashMap... Tu n'auras pas non plus de doublons => association clé - valeur

Donc tu crées ta HashMap au début de ta proc (pas à chaque boucle (ça ira mieux)) et ensuite tu vérifie si la clé a été insérée... si oui alors tu incrémentes sinon tu insére avec la valeur 1.

Et puis voilà le tour est joué, aprés il ne te reste plus qu'a récupérer les valeurs de ta HashMap et les trier comme tu en as envie...

@+
Jef
0
Lebowskijul Messages postés 3 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 4 janvier 2005
4 janv. 2005 à 21:40
Je te remercie mec car effectivement je faisais un peu n'importe quoi !
J'ai essayé de faire comme tu m'as dit, et avec un peu de chance j'y suis arrivé !
Il ne me reste plus qu'à faire une interface !

Ciao

The Dude
0
Rejoignez-nous