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

2D Java Discussion :

Afficher une image en teinte


Sujet :

2D Java

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut Afficher une image en teinte
    Bonjour,

    je suis censée faire un programme qui rend une image en luminance teinte et saturation en utilisant des fonctions mathématiques. Pour la luminance et la saturation j'ai pas eu de prb, par contre en teinte ça affiche une image avec des couleurs bizzares. Je sais que le prb est un prb d'affichage parceque les calculs sont bien juste. J'aimerai bien que vous m'aidiez.

    Puis enfaite aprés avoir fait ça je suis censée reconstruite l'image en teinte pour avoir une image presque identique à l'image de départ vu que aprés la teinte j'ai l'image en presque noir et blanc en utilisant une charte de couleur, un genre de reconstruction ???
    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
     
     
    public void afficheimageteinte(){
             int width = monImage.getWidth();
             int height = monImage.getHeight();
            for(int i=0; i<height; i++){
     
                    for(int j=0; j<width; j++){
     
                       Color c = new Color(monImage.getRGB(j, i));
     
                      //U
                       int red1 = ((int)(c.getRed()* (-0.14713) ));
                       int blue1 = (int)(c.getBlue()* (0.436));
                       int green1 = ((int)(c.getGreen()*(-0.28886)));
                       double sommeU=red1+green1+blue1; //RESULTAT U
     
                       // V
                       int red2 = ((int)(c.getRed() * 0.615));
                       int green2 = ((int)(c.getGreen() * (-0.51498)));
                       int blue2 = ((int)(c.getBlue() * (-0.10001)));
                       double sommeV=red2+green2+blue2; //RESULTAT V
     
     
                      double teinte = 0;
                       if(sommeV==0){
                           if(sommeU>0)
                               teinte=0;
                           else
                               teinte =180;}
                           else if(sommeV!=0)
                         teinte =180*(Math.atan2(sommeV,sommeU))/3.141592;
     
     
                      Color newColor = new Color( (int) teinte);
     
                     monImage.setRGB(j,i,newColor.getRGB());
                    repaint();
                    }
                 }
        }

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Comme le constructeur le dit, il attends un entier qui contient le RGB. Toi tu passe un entier qui n'a rien avoir d'ou des "couleurs bizarres".

    Il doit donc te manquer une ou des opération pour passer de ta teinte au RGB.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Bonjour,

    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
    public void afficheimageteinte(){
            //monImage = hImg;
            //repaint();
     
             int width = monImage.getWidth();
             int height = monImage.getHeight();
             double max = Double.MIN_VALUE;
             double min = Double.MAX_VALUE;
            for(int i=0; i<height; i++){
     
                    for(int j=0; j<width; j++){
     
                       Color c = new Color(monImage.getRGB(j, i));
     
                      //U
                       int red1 = ((int)(c.getRed()* (-0.14713) ));
                       int green1 = ((int)(c.getGreen()*(-0.28886)));
                       int blue1 = (int)(c.getBlue()* (0.436));
                       double sommeU=red1+green1+blue1; //RESULTAT U
     
                       // V
                       int red2 = ((int)(c.getRed() * 0.615));
                       int green2 = ((int)(c.getGreen() * (-0.51498)));
                       int blue2 = ((int)(c.getBlue() * (-0.10001)));
                       double sommeV=red2+green2+blue2; //RESULTAT V
     
     
                      double teinte = 0;
                       if(sommeV==0){
                           if(sommeU>0)
                               teinte=0;
                           else
                               teinte =180;}
                      else if (sommeV!=0)
                           teinte =180*(Math.atan2(sommeV,sommeU))/Math.PI;
     
                       if(max < teinte)
                        max = teinte;
                       if(min > teinte)
                        min = teinte;
     
                      teinte += 180;
                      int gr = (int)(teinte*255.0/360.0);
     
                      Color newColor = new Color(gr, gr, gr);
     
                     monImage.setRGB(j,i,newColor.getRGB());
     
                    }
                 }
                 repaint();
        }


    voilà mon code pouvez vous m'aider parceque je suis vraiment bloquée là, j'ai essayer une méthode qui affiche l'image en RGB mais mon encadreur à dit qu'elle est fausse, je suis censée à partir d'une charte de couleur afficher l'image qui est en noir et blanc en couleur

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Et c'est quoi cette "charte de couleur"? un liste de clé/valeur donnant la valeur RGB pour chaque niveau de gris?
    Une image saturée donnant la teinte de chaque point, le niveau de gris servant d'intensité?
    Autre chose?

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Nom : Capture.PNG
Affichages : 152
Taille : 1,1 Ko

    C'est ça la charte de couleur

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    en faite c'est plutot une liste de valeur donnant la valeur RGB pour chaque niveau de gris

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    @Tchize_: Tu as surement déjà compris, il parle de transformation RGB (noir/blanc) vers HSV/HSB (je ne sais plus) puis retransformation vers RGB. Pour "colorer" le n/b genre sepia (je présume du moins).

    https://fr.wikipedia.org/wiki/Teinte_Saturation_Valeur
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    enfaite j'étais obligé d'utliser des fonctions mathematiques pour définir la saturation teinte et luminance. j'ai déjà transformer l'image en ses trois ils sont en noir et blan. Puis là je dois transformer l'image"teinte NB" en image teinte color en utilisant une charte de couleur, pour chaque niveau de gris y'a une couleur spécifique mais j'en ai aucune idée comment le faire

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Et bien, puisque c'est une liste donnant la couleur pour chaque valeur de gris, tu as juste un créer un tableau de 256 Color suivant cette charte, et dans ton code ça se résume à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int index = monImage.getRGB(j, i).getRed();
    Color newColor = tableauColor[index];
    monImage.setRGB(j,i,newColor.getRGB());

  10. #10
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    oui mais le problème c'est que j'ai pas la charte qui fait ça!!!!!

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Comme tu ne pouvais pas utiliser la fonction toute fait de java. La solution je te l'ai données dans les liens... mais tu n'as peut être pas bien lu.

    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Par exemple cette image Nom : palette-munsell.jpg
Affichages : 247
Taille : 53,6 Ko voilà sa teinte en gris Nom : test.JPG
Affichages : 238
Taille : 14,1 Ko apres coloration il doit avoir preesque un seul vert ou il y'a du vert degrader vert un seul bleu...

  13. #13
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    je crois c'est exactement ce que je cherchais, pouvais vous me donner un coup de pouce pour le programmer en java vu que je suis vraiment debutant

  14. #14
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Je veux bien te donner une piste sous forme de code. Mais sache que le code tel qu'il est ne fonctionnera pas pour toi. Il n'a pour but que de te donner une indice, de plus je pense que le R et B sont inversés :

    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
     
    /**
             * Input from 0 (min) to 1024 (max)
             * @param indiceCouleur
             * @return Couleur 
             */
    	public static Color getCouleurFromValue(int indiceCouleur)
        {   
    	    int r=0,v=0,b=255;
    		if (0< indiceCouleur && indiceCouleur<=256){
    			r=0;
    			v=(int) (indiceCouleur-1);
    			b=255;
    		}
    		else if (256<indiceCouleur && indiceCouleur<=512){
    			r=0;
    			v=255;
    			b=(int) (512-indiceCouleur);
    		}
    		else if (512<indiceCouleur && indiceCouleur<=768){
    			r=(int) (255-(768-indiceCouleur));
    			v=255;
    			b=0;
    		}	
    		else if (768<indiceCouleur && indiceCouleur<=1024){
    			r=255;
    			v=(int) (1024-indiceCouleur);
    			b=0;
    		}
    		Color c = new Color(r,v,b);
    		return c;
        }
    (et il y'a plus simple comme raisonnement à mon avis).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    plus simple comme quoi ? Je suis preneuse de n'importe quelle information parceque là franchement je bloque

  16. #16
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Aucune idées...

    Regarde la source de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static int HSBtoRGB(float hue, float saturation, float brightness)
    de la classe Color.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    Oui j'ai déjà tester et elle me rend l'image de départ vu qu'elle depend du HUE SATURATION AND brithness, par contre moi je veux que colorier le resultat de l'image hue, au lieu qu'elle soit en gris elle soit en couleur?
    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
    private void setImages()
    	{
    		 hImg = new BufferedImage((int)(monImage.getWidth()),(int)( monImage.getHeight()), monImage.getType());
    		 sImg = new BufferedImage((int)(monImage.getWidth()),(int)( monImage.getHeight()), monImage.getType());
    		 lImg = new BufferedImage((int)(monImage.getWidth()),(int)( monImage.getHeight()), monImage.getType());
     
    		 int width = monImage.getWidth();
             int height = monImage.getHeight();
    		 for(int i=0; i<height; i++){
     
    	            for(int j=0; j<width; j++){
     
    	               int p = monImage.getRGB(j, i);
    	               float[] hsbvals = new float[3];
    	              Color.RGBtoHSB((p>>16)&0xff, (p>>8)&0xff, p&0xff, hsbvals);
    	              int h = (int)(hsbvals[0]*255);
    	              int s = (int)(hsbvals[1]*255);
    	              int l = (int)(hsbvals[2]*255);
     
    	              hImg.setRGB(j,i,new Color(h,h,h).getRGB());
    	              sImg.setRGB(j,i,new Color(s,s,s).getRGB());
    	              lImg.setRGB(j,i,new Color(l,l,l).getRGB());
     
                 }
             }
    	}
     
     
    	protected void afficheImageLuminance(){
     
    		monImage = lImg;
    		repaint();
         }
     
     
    	protected void afficheImageSaturation(){
    		monImage = sImg;
    		repaint();
     
    	      	        }
     
    	public void afficheimageteinte(){
    		monImage = hImg;
    		repaint();
    	}
     
    	public void toColor(){
    	 int width = monImage.getWidth();
    	 int height = monImage.getHeight(); 
    	for(int i=0; i<height; i++){
     
    	        for(int j=0; j<width; j++){
    	            float h = ((hImg.getRGB(j, i)>>16)&0xff) /255.0f;
    	            float s = ((sImg.getRGB(j, i)>>16)&0xff) /255.0f;
    	            float l = ((lImg.getRGB(j, i)>>16)&0xff) /255.0f;
    	         monImage.setRGB(j,i,Color.getHSBColor(h, s,l).getRGB());
     
    	        }
    	}
    	repaint();
    }

    LE CODE QUE J'avais utilisé mais qui me rend l'image de départ

  18. #18
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Moi je n'ai toujours pas compris ce que tu cherche à faire au final. Le code que tu donne sépare ton image en trois images grises: le hue, la saturation et la valeur. Ca ne prends pas une image en niveau de gris au départ, et ça ne retourne pas une image mais trois images.

    Du coup, qu'est-ce que tu essaie de faire? Soit clair, donne un exemple chiffré, je ne sais pas, mais ça m'a l'air vachement confus tout ça.

  19. #19
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Par défaut
    L'image de départ est une image RGB, je rend 3 images , image teinte saturation et luminance. Je dois prendre le résultat image teinte qui est en nuance de gris et le colorier en utilisant une charte.

  20. #20
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Donc la chaine serait un truc genre :

    Image RGB (couleurs) -> Image N/B -> RGB vers TSL -> changement teinte -> TSL vers RGB -> RGB (couleurs)

    non ? (en omettant la saturation et la luminosité).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB.NET] afficher une image stockée dans une table
    Par matonfire dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/03/2004, 11h21
  2. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  3. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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