IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

problème dans le traitement des couleurs


Sujet :

Graphisme Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Comment ai-je pu rater ça, c'est normal, ta BufferedImage est vide, tu doit dessiner ton image dedans... tu dois rajouter ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BufferedImage bufferedImage = new BufferedImage( image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB );              Graphics g = bufferedImage.createGraphics();
    g.drawImage(image,0,0,null);
    g.dispose();

  2. #2
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    nickel jme doutais bien vu que yavait un pb avec els pixels que l'image était pas entièrement chargée.

    Par contre comme j'ai 50000 teintes la comparaison est longue et surtout peu fructueuse donc jcrois que je vais laisser tomber la comparaison

    On va pouvoir attaquer l'histogramme, tu me diras ce que tu veux à noël

    Surtout que pendant le test il y a encore un problème il n'arrete pas de m'afficher que teinte[j] vaut zéro grrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    for(int i=0;i<rgbs.length;i++)
    			{
    				int rouge = (rgbs[i] >>16 ) & 0xFF;
    				int vert = (rgbs[i] >> 8 ) & 0xFF;
    				int bleu = rgbs[i] & 0xFF; 
    				//permet de récupérer directement la teinte d'un pixel
    				//teinte[0] : teinte du pixel
    				//hsb[1]: Saturation
    				//hsb[2]: Luminosité
    				testDoublon = (Color.RGBtoHSB(rouge,vert,bleu,null))[0];
    				for (int j=0;j<i-1;j++)
    				{
    					if (teinte[j]==testDoublon) 
    					{
    						ajout=false;
    					}
    				}
    				if(ajout==true)
    				{
    					teinte[i]=testDoublon;
    				}
    			}

  3. #3
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Citation Envoyé par sironimo
    tu me diras ce que tu veux à noël Laughing
    Sûr, je le mérite là!

    Citation Envoyé par sironimo
    crois que je vais laisser tomber la comparaison
    Bon le problème sera le même au moment de la création de ton histogramme... De toute façon si tu fais ce teste, il faut que tu remplace ton tableau par une ArrayList, faute de quoi t'aura des cases vides.

  4. #4
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    bah alors va falloir m'aider pour l'arraylist

    comme je patauge en plus le castage de float en object ca pose pas de pb?

  5. #5
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Voilà un code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ArrayList teinte=new ArrayList();
     
        boolean ajout=true;
        float testDoublon;
        for(int i=1;i<tabPix.length-1;i++)
             {
              couleur=new Color(tabPix[i-1]);
              testDoublon = (Color.RGBtoHSB(couleur.getRed(),couleur.getGreen(),couleur.getBlue(),null))[0];
              int j=1;
              boolean ajouter=true;
              while(j<teinte.size()&&ajouter==true)
              	{
              	if((int)(testDoublon*1000)==(int)(((Float)teinte.get(j)).floatValue()*1000))
              		{
              		ajouter=false;
              		}
              	j++;
              	}
              if(ajouter)
              	{
              	teinte.add(new Float(testDoublon));
              	}
     
             }
    J'ai ajouter les ArrayList, et une des raison pour lesquelles ta boucle ne marchait pas, c'est parceque tu ne remettais jamais ajouter à true, donc dès qu'il trouvait deux valeurs identiques, il n'en ajoutais plus.

    rem : le *1000 plus le caste en int, c'est pour trouver des teintes similaires, tu peux augmenter ou diminuer ce facteur.

  6. #6
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Sinon pour l'histogramme, rien de plus simple tu fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Override public void paintComponent(Graphics g)
    		{
    		super.paintComponent(g);
    		Graphics2D g2d=(Graphics2D)g;
    		g2d.scale(1,-1);
    		g2d.translate(0,-100);
    		for(int i=1;i<=pixels.size();i++)
    		  {		  g2d.setColor(Color.getHSBColor(((Float)pixels.get(i-1)).floatValue(),1,1));
    		  g2d.fillRect((i-1)*largeurBarre,0,largeurBarre,(int)(((Float)pixels.get(i-1)).floatValue()*100));
    		  }
    		}
    Comme ça en plus, les barres de ton histogramme prennent la couleur du pixel...

  7. #7
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Franchement bravo et entretemps j'avais rectifié pour le booléen rolala on va dire que c'était dû à la fatigue

    Sinon merci pour le arraylist en plus j'ai réussi à réduire le nombre de teintes de 50000 à 320 donc c'est vraiment parfait maintenant voyons un peu l'histogramme.

  8. #8
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Voilà le code et son avancement, j'ai intégré ton système pour l'histogramme et j'ai défini une taille pour largeurBarre.

    Après comment on fait pour afficher dans une JFrame car je voudrais mettre sur ce component un scroll pane vu le nombre de teintes différentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    public class LectureImage extends JPanel
    {
    	//private static final int MASK = 0xFF;/**Constante de masque pour la comparaison bit à bit*/
    	protected URL url;
    	protected ArrayList teinte=new ArrayList();
    	public LectureImage(URL url)
    	{
    		this.url=url;
    	}
     
    	public void Connection()
    	{
    		try
    		{
    			URLConnection urlC= url.openConnection();
    			System.out.println(url);
    			//Accès au toolkit
    			java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
    			//lecture de l'image
    			Image image = toolkit.getImage(url);
    			//On s'assure que l'image est complètement chargée
    			image = new ImageIcon(image).getImage();
    			BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB );
    			Graphics g = bufferedImage.createGraphics();
    			g.drawImage(image,0,0,null);
    			g.dispose();
    			//Lecture de tous les pixels
    			int w = bufferedImage.getWidth();
    			int h = bufferedImage.getHeight();
    			int[] rgbs = new int[w*h];
    			//On crée l'espace neccessaire
    			bufferedImage.getRGB(0,0,w,h,rgbs,0,w);
    			//float[] teinte=new float[w*h];
    			//parcours de mon tableau de pixels
     
    			//ArrayList teinte=new ArrayList();				   
    			boolean ajout=true;
    			float testDoublon;
     
    			for(int i=1;i<rgbs.length-1;i++)
    			{
    				int rouge = (rgbs[i-1] >>16 ) & 0xFF;
    				int vert = (rgbs[i-1] >> 8 ) & 0xFF;
    				int bleu = rgbs[i-1] & 0xFF; 
    				//permet de récupérer directement la teinte d'un pixel
    				testDoublon = (Color.RGBtoHSB(rouge,vert,bleu,null))[0];
    				int j=1;
    		        boolean ajouter=true;
    		        while(j<teinte.size()&&ajouter==true)
    		        {
    		           if((int)(testDoublon*1000)==(int)(((Float)teinte.get(j)).floatValue()*1000))
    		           {
    		              ajouter=false;
    		           }
    		           j++;
    		        }
    		        if(ajouter)
    		        {
    		             teinte.add(new Float(testDoublon));
    		        }
    			}
    			System.out.println(teinte.size());
    			this.paintComponent(g);
     
    		}
    		catch (IOException e)
    		{
    			e.printStackTrace();
    		}
     
    	}
     
    	public void paintComponent(Graphics g)
        {
    	int largeurBarre=10;
        super.paintComponent(g);
        Graphics2D g2d=(Graphics2D)g;
        g2d.scale(1,-1);
        g2d.translate(0,-100);
        for(int i=1;i<=teinte.size();i++)
          {        g2d.setColor(Color.getHSBColor(((Float)teinte.get(i-1)).floatValue(),1,1));
          g2d.fillRect((i-1)*largeurBarre,0,largeurBarre,(int)(((Float)teinte.get(i-1)).floatValue()*100));
          }
        }
    }

  9. #9
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    helllpppp comment que je fais maintenant avec ce graphics pour le lier avec mon main qui est une JFrame et surtout provoquer l'affichage de l'histogramme?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class TP1Main {
     
    	public static void main(String[] args) 
    	{
    		try
    		{
    			//récupération de l'image sur le web
    			LectureImage li= new LectureImage(new URL("http://sironimo11.free.fr/Carte_SDA.jpg"));
    			li.Connection();
    			JFrame frame= new JFrame();
    			frame.pack();
    		    frame.setSize(800,600);
    			frame.setVisible(true);
     
    		}
    		catch(MalformedURLException e)
    		{
    			e.printStackTrace();
    		}
    	}
     
     
    }

  10. #10
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Tu peux déjà faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    frame.getContentPane().add(new LectureImage());
    pack();
    Il faudra que tu donne une taille préférée à ton panel correspondant à ton histogramme pour qu'il s'affiche.

  11. #11
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    regarde j'ai fait un autre sujet pour le scroll pane et ça marche pas

    http://www.developpez.net/forums/viewtopic.php?t=433565

  12. #12
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    c'est bon pb résolu merci à toi adamas tu me diras combien jte dois

  13. #13
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Citation Envoyé par sironimo
    c'est bon pb résolu merci à toi adamas tu me diras combien jte dois
    Ou là là, je suis bien trop cher pour toi...

    Ce fut un plaisir.

  14. #14
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème: formulaire et traitement des données
    Par Pahcixam dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2006, 05h37
  2. [AJAX] Traitement des balises html
    Par Mysti¢ dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/08/2006, 23h07
  3. Réponses: 2
    Dernier message: 11/05/2005, 14h23
  4. Problème dans le calcul des normales moyennes,
    Par MaxPayne dans le forum OpenGL
    Réponses: 1
    Dernier message: 12/04/2005, 18h50
  5. [ORACLE 9.2] Problème dans le Manager des tâches Win
    Par vempiria dans le forum Oracle
    Réponses: 25
    Dernier message: 12/10/2004, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo