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 :

[image]buffered Image et manipulation de pixels


Sujet :

2D Java

  1. #1
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut [image]buffered Image et manipulation de pixels
    Bonsoir à tous

    voilà mon souci

    mon objectif est de recuperer une image dont l'url est passée à une classe , via un JFile chooser; jusque là j'y arrive
    une fois ceci je transforme mon image en instance de BufferedImage afin de pouvoir manipuler les pixels

    mon but est de transformée mon image initiale en ne faisant apparaitre que les compsantes rouges de chaque pixel

    pour cela je recupere les pixels de l'image "bufferisée" puis je recupere les composantes rouge de chaque pixel et enfin je modifie les pixels pour ne mettre que cette composante
    une fois ces manips efectuées je voudrais l'afficher ...

    sauf que mon problemes est que mon image ne s'affiche pas ; j'ai mis des sorte de "traces" pour voir où se situait le probleme et visiblement lorsque que la methode paint est appelée mon image est "null"

    voici mon code

    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
     
     
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.image.BufferedImage;
    import java.awt.Image;
    import java.net.URL;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
     
    public class Synthese extends JFrame{
    	private Image image;
    	Synthese(){
    		this.setTitle("Synthese additive");
    		this.setSize(600,600);
    		this.setLocationRelativeTo(this);
    		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		/** ...puis on l'affiche */
    		this.setVisible(true);
    	}
    	void dessinSynthese(URL URLImage){
    			/** Accès au toolkit : */
    			java.awt.Toolkit toolkit =  java.awt.Toolkit.getDefaultToolkit();
    			/** lecture de l'image : */
    			Image image = toolkit.getImage(URLImage);
    			//transformation de l'image en BufferedImage
    			toBufferedImage(image);
    		}
    	void toBufferedImage(Image image) {
    		/** On test si l'image n'est pas déja une instance de BufferedImage */
    			if( image instanceof BufferedImage ) {
    				/** cool, rien à faire */
    				//return( (BufferedImage)image );
    			} else {
    				/** On s'assure que l'image est complètement chargée */
    				image = new ImageIcon(image).getImage();
     
    				/** On crée la nouvelle image */
     
    				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();
    				constructionImage(bufferedImage);		    
    				System.out.println("taille : ");
    				//return(bufferedImage);
    			}
    	}
    	void constructionImage(BufferedImage image){
    		int w = image.getWidth(null);
    		int h = image.getHeight(null);
    		//System.out.println(w);
    		System.out.println("taille2 : " + w*h);
    		int[] rgbs = new int[w*h];
    		image.getRGB(0,0,w,h,rgbs,0,w);
    		for(int i = 0;i<rgbs.length;i++){
    			int rouge = (rgbs[i] >>16 ) & 0xFF; 
    			int vert = 0; 
    			int bleu = 0; 
    			rgbs[i] = rouge + vert + bleu;
    			System.out.println(rgbs[i]);
    			System.out.println(i);
    		}
    		image.setRGB(0,0,w,h,rgbs,0,w);
    		repaint();
    	}
    	public void paint(Graphics g){ 
    		  Rectangle rect = this.getBounds(); 
    		  if(image != null) { 
    			  g.drawImage(image, 0,0,image.getWidth(null),image.getHeight(null), this); 
    		  }
    		  else{System.out.println("image nulle ");}
    		//  g.drawString("Name  :   " + nomIm,5,image.getHeight(null) + 20);
    		  //g.drawString("width :   " + image.getWidth(null) ,5,image.getHeight(null) + 40);
    		 // g.drawString("height :   " + image.getHeight(null),5,image.getHeight(null) + 60); 
    	   } 
     
    	public static void main(String[] args) {
    		Synthese synthese = new Synthese();
    	}
    }
    je pense que c'est dans la methode constructionImage que cela pose
    probleme

    merci d'avance

  2. #2
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Je crois que ton probleme vient de ta methode paint. En effet en Swing, la méthode invoquée pour redessiner un composant est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void paintComponent(Graphics g)
    {
    ...
    }
    et non paint(...).

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    Oui, la logique de Swing est de redéfinir la méthode paintComponent car paint s'occupe de faire l'appel à paintComponent, paintBorder etc...

    Par contre, moi je vois ceci dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void toBufferedImage(Image image) { 
      [...]
      image = new ImageIcon(image).getImage(); 
    }
    Ca, ça ne peut pas marcher. Tu ne peux pas modifier la référence d'un paramètre de méthode pour changer l'objet. Il faut faire une fonction qui retourne l'image, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Image toBufferedImage(Image image) {
      if (image instanceof BufferedImage) return (BufferedImage) image;
      Image nouvelleImage = new ImageIcon(image).getImage();
      [...]
      return nouvelleImage;
    }

  4. #4
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    bon ben merci à tous les deux je vais faire les modifs et je vous tiens au courant

  5. #5
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    en fait j'ai fait les modifs suivantes

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
     
    import java.awt.Graphics;
    //import java.awt.Rectangle;
    import java.awt.image.BufferedImage;
    import java.awt.Image;
    import java.net.URL;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
     
    /*
     * Created on 14 févr. 2005
     *
     * 
     */
     
    /**
     * @author Ismail
     *
     * 
     */
    public class Synthese extends JFrame{
    	private Image image;
    	private BufferedImage bi;
    	private BufferedImage biR;
     
    	Synthese(){
    		this.setTitle("Synthese additive");
    		this.setSize(300,300);
    		this.setLocationRelativeTo(this);
    		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		/** ...puis on l'affiche */
    		this.setVisible(true);
    	}
    	void dessinSynthese(URL URLImage){
    			/** Accès au toolkit : */
    			java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
    			/** lecture de l'image : */
    			Image image = toolkit.getImage(URLImage);
    			//transformation de l'image en BufferedImage
    			bi = toBufferedImage(image);
    			biR = filtreR(bi);
    			repaint(); 
    		}
    	BufferedImage toBufferedImage(Image image) {
    		/** On test si l'image n'est pas déja une instance de BufferedImage */
    			if( image instanceof BufferedImage ) {
    				/** cool, rien à faire */
    				return( (BufferedImage)image );
    			} else {
    				/** On s'assure que l'image est complètement chargée */
    				image = new ImageIcon(image).getImage();
     
    				/** On crée la nouvelle image */
     
    				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();
    				//filtreR(bufferedImage);		    
    				//System.out.println("taille : ");
    				return(bufferedImage);
    			}
    	}
    	BufferedImage filtreR(BufferedImage image){
    		int w = image.getWidth(null);
    		int h = image.getHeight(null);
    		//System.out.println(w);
    		System.out.println("taille2 : " + w*h);
    		int[] rgbs = new int[w*h];
    		/*image.getRGB(0,0,w,h,rgbs,0,w);
    		for(int i = 0;i<rgbs.length;i++){
    			int rouge = (rgbs[i] >>16 ) & 0xFF; 
    			int vert = 0; 
    			int bleu = 0; 
    			rgbs[i] = rouge + vert + bleu;
    			System.out.println(rgbs[i]);
    			System.out.println(i);
    		}*/
    		//image.setRGB(0,0,w,h,rgbs,0,w);
    		for(int y = 0;y<h;y++){
    			for(int x = 0;x<w;x++){
    				int pixel = image.getRGB( x, y );
    				image.setRGB( x, y, pixel&0xFFFF0000 );
    			}
    		}
    		return(image);
     
    	}
    	public void paintComponent(Graphics g){ 
    		  //Rectangle rect = this.getBounds(); 
    		  if(image != null) { 
    			  g.drawImage(biR, 0,0,biR.getWidth(null),biR.getHeight(null), null); 
    		  }
    		  else{System.out.println("image nulle ");}
    		//  g.drawString("Name  :   " + nomIm,5,image.getHeight(null) + 20);
    		  //g.drawString("width :   " + image.getWidth(null) ,5,image.getHeight(null) + 40);
    		 // g.drawString("height :   " + image.getHeight(null),5,image.getHeight(null) + 60); 
    	   } 
     
    	public static void main(String[] args) {
    		Synthese synthese = new Synthese();
    	}
    }
    il m'affiche bien la taille de l'image dans l'invite de commande comme je le demande dans la methode filtreR

    le probleme est que la nouvelle fenetre s'ouvre mais il n' ya rien d'affichee dans cette derniere !
    pourtant l'image existe bien et je pense que la methode filtreR renvoie bien seulement l'image avec les composantes rouges !

  6. #6
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Alors dans ton main tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Synthese synthese = new Synthese(); 
      synthese.dessinSynthese(url_de_ton_image);
    le probleme c'est que ta fenetre va s'afficher mais il y aura rien, a cause du setVisible(true) que tu mets a la fin de ton constructeur moi je l'enleverai et à la fin du main je rajouterai synthese.setVisible(true) ;

  7. #7
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    salut

    en fait l'url de l'image est envoyée par une une instance d'une autre classe via le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    URL urlImage = localImage.getSelectedFile().toURL();
    synthese = new Synthese();
    synthese.dessinSynthese(urlImage);
    où localImage est un JFileChooser

    cependant le fait de mettre syntese.setVisible(true) ne me permet d'avoir l'effet escompté

    en fait j'ai rajouté des "traces" par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public void paintComponent(Graphics g){ 
    		  Rectangle rect = this.getBounds(); 
    		  if(image != null) { 
    			  g.drawImage(biR, 0,0,biR.getWidth(null),biR.getHeight(null), null); 
    		  	  System.out.println("largeur " + biR.getWidth(null));
    		  }
    		  else{System.out.println("image nulle ");}
    }
    et je n'ai pas d'affichage de la largeur et je n'ai pas de message m'indiquant "image nulle"
    j'en deduit que la methode paintComponent n'est pas appelée ?
    c'est bizarre ... je ne comprends pas la logique des methodes paint() ...[/code]

  8. #8
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    J'ai repris ton code et j'ai l'ai testé, excuse j'ai du modifier des choses parce que j'ai pas toute ton archi mais chez moi il marche nickel !!! :
    Pour info , rouge.png c'est l'icone du jeu d'echec sous xp qui a pas mal de rouge a la base et après ton traitement elle était bleue donc ca 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
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.image.BufferedImage;
    import java.awt.Image;
    import java.net.URL;
     
    import javax.swing.*;
     
    public class Synthese extends JFrame{
       private Image image;
       Synthese(){
          this.setTitle("Synthese additive");
          this.setSize(600,600);
          this.setLocationRelativeTo(this);
          this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
          /** ...puis on l'affiche non pas tout de suite !!! */
     
       }
       void dessinSynthese(String URLImage){
             /** Accès au toolkit : */
             java.awt.Toolkit toolkit =  java.awt.Toolkit.getDefaultToolkit();
             /** lecture de l'image : */
             Image image = toolkit.getImage(URLImage);
             //transformation de l'image en BufferedImage
             Image i = toBufferedImage(image);
     
             /**pour tester a la va vite ***/
     
             JButton b = new JButton(new ImageIcon(i)) ;
          	 b.setSize(600,600);
          	 getContentPane().add(b);
          	   this.setVisible(true);
          }
       Image toBufferedImage(Image image) {
          /** On test si l'image n'est pas déja une instance de BufferedImage */
             if( image instanceof BufferedImage ) {
                /** cool, rien à faire */
                return( (BufferedImage)image );
             } else {
                /** On s'assure que l'image est complètement chargée */
                image = new ImageIcon(image).getImage();
     
                /** On crée la nouvelle image */
     
                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();
                constructionImage(bufferedImage);         
                System.out.println("taille : ");
                return(bufferedImage);
             }
       }
       void constructionImage(BufferedImage image){
          int w = image.getWidth(null);
          int h = image.getHeight(null);
          //System.out.println(w);
          System.out.println("taille2 : " + w*h);
          int[] rgbs = new int[w*h];
          image.getRGB(0,0,w,h,rgbs,0,w);
          for(int i = 0;i<rgbs.length;i++){
             int rouge = (rgbs[i] >>16 ) & 0xFF;
             int vert = 0;
             int bleu = 0;
             rgbs[i] = rouge + vert + bleu;
             System.out.println(rgbs[i]);
             System.out.println(i);
          }
          image.setRGB(0,0,w,h,rgbs,0,w);
          repaint();
       }
       public void paintComponent(Graphics g){
            Rectangle rect = this.getBounds();
            if(image != null) {
               g.drawImage(image, 0,0,image.getWidth(null),image.getHeight(null), this);
            }
            else{System.out.println("image nulle ");}
          //  g.drawString("Name  :   " + nomIm,5,image.getHeight(null) + 20);
            //g.drawString("width :   " + image.getWidth(null) ,5,image.getHeight(null) + 40);
           // g.drawString("height :   " + image.getHeight(null),5,image.getHeight(null) + 60);
          }
     
       public static void main(String[] args) {
     
     
     
          Synthese synthese = new Synthese();
           synthese.dessinSynthese("./rouge.png"); //c'est l'icone du jeu d'echec sous xp
     
       }
    }

  9. #9
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    effectivement ça marche !
    merci

    j'ai encore une question stp:
    je voudrais afficher 3 images issues de l'image initiale mais seulement avec les composantes R,V et B chacune
    j'ai donc dupliquer 3 fois la methode constructionPixel en mettant à chaque fois la composante adequate;

    mon probleme est que je n'arrive pas à afficher les 3 images : je pense que ceci provient du fait que je manipule l'image initiale directement
    je pense que l'ideale serait de dupliquer 3 fois l'image initiale et de les modifier comme ce qui a été fait precedemment pour la composante R

    est ce que tu aurais une idee pour dupliquer une image stp ?

  10. #10
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Le plus simple est de créer trois fois ton image dans dessinSynthèse de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Image image =toolkit.createImage(URLImage);
    Image image2 =toolkit.createImage(URLImage);
    Image image3 =toolkit.createImage(URLImage);
    et là ca marche.

  11. #11
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    salut

    ben visiblement ça ne marche pas
    je mets le code comme tu me le dit
    il m'affiche deux images rouges mais ne me creer pas
    j'ai l'impression que je ne cree pas les autres images car lorsque je demande la taille de la nouvelle image il me rends -1





    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.image.BufferedImage;
    import java.awt.Image;
    import java.net.URL;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
     
    public class Synthese extends JFrame{
    	private Image image;
    	private Image ImageR;
    	private Image ImageV;
    	private Image ImageB;
    	private Image ir;
    	private Image ib;
    	private Image iv;
     
    	private Container pane;
     
    	Synthese(){
    		this.setTitle("Synthese additive");
    		this.setSize(300,300);
    		this.setLocationRelativeTo(this);
    		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		pane = this.getContentPane();
    		pane.setLayout(new FlowLayout());
    	}
    	void dessinSynthese(URL URLImage,String nomImage){
    			/** Accès au toolkit : */
    			java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
    			/** lecture de l'image : */
    			Image image = toolkit.getImage(URLImage);
    			Image ImageR = toolkit.createImage(URLImage);
    			Image ImageV = toolkit.createImage(URLImage);
    			Image ImageB = toolkit.createImage(URLImage);
    			System.out.println(ImageR.getHeight(null));
    			String nomImR = nomImage + "R";
    			String nomImV = nomImage + "V";
    			String nomImB = nomImage + "B";
    			//transformation de l'image en BufferedImage
    			BufferedImage ir = toBufferedImage(ImageR); 
    			BufferedImage ib = toBufferedImage(ImageV);
    			BufferedImage iv = toBufferedImage(ImageB);
    			filtreR(ir);
    			filtreB(ib);
    			filtreV(iv);
     
    				JButton b = new JButton(new ImageIcon(ir)) ; 
    				b.setSize(300,300); 
    				JButton b2 = new JButton(new ImageIcon(ib)) ; 
    				b2.setSize(300,300);
    				pane.add(b);
    				pane.add(b2);
     
     
    			this.setVisible(true);
     
    		}
    	BufferedImage toBufferedImage(Image imageinit) {
    		/** On test si l'image n'est pas déja une instance de BufferedImage */
    			if( imageinit instanceof BufferedImage ) {
    				/** cool, rien à faire */
    				return( (BufferedImage)imageinit );
    			} else {
    				/** On s'assure que l'image est complètement chargée */
    				image = new ImageIcon(imageinit).getImage();
                    ir =  new ImageIcon(imageinit).getImage();
    				iv = new ImageIcon(imageinit).getImage();
    				ib =  new ImageIcon(imageinit).getImage();
    				/** On crée la nouvelle image */
     
    				BufferedImage bufferedImage = new BufferedImage(
    				imageinit.getWidth(null),
    				imageinit.getHeight(null),
    				BufferedImage.TYPE_INT_RGB );
    				Graphics g = bufferedImage.createGraphics();
    				g.drawImage(image,0,0,null);
    				g.drawImage(ir,0,0,null);
    				g.drawImage(iv,0,0,null);
    				g.drawImage(ib,0,0,null);
    				g.dispose();
    				//filtreR(bufferedImage);		    
    				//System.out.println("taille : ");
    				return(bufferedImage);
    			}
    	}
    	 void filtreR(BufferedImage imR){
    		int w = image.getWidth(null);
    		int h = image.getHeight(null);
    		for(int y = 0;y<h;y++){
    			for(int x = 0;x<w;x++){
    				int pixel = imR.getRGB( x, y );
    				imR.setRGB( x, y, pixel&0xFFFF0000 );
    			}
    		}
    		repaint();
    	}
    	void filtreB(BufferedImage imB){
    		   int w = image.getWidth(null);
    		   int h = image.getHeight(null);
    		   for(int y = 0;y<h;y++){
    			   for(int x = 0;x<w;x++){
    				   int pixel = imB.getRGB( x, y );
    				   imB.setRGB( x, y, pixel&0xFF0000F );
    			   }
    		   }
    		   repaint();
    	   }
    	void filtreV(BufferedImage imV){
    		int w = image.getWidth(null);
    		int h = image.getHeight(null);
    	    for(int y = 0;y<h;y++){
    			for(int x = 0;x<w;x++){
    				int pixel = imV.getRGB( x, y );
    				imV.setRGB( x, y, pixel&0xFF00FF00 );
    			}
    		}
    			  // repaint();
    	}
    	public void paintComponent(Graphics g){ 
    		Rectangle rect = this.getBounds(); 
    		if(ir != null) { 
    			g.drawImage(ir, 0,0,ir.getWidth(null),ir.getHeight(null), null);
    			System.out.println("OK");
    		 }
    		if(ib != null) { 
    			g.drawImage(ib, 0,0,ib.getWidth(null),ib.getHeight(null), null); 
     
    		}
    		  else{System.out.println("image nulle ");}
    		//  g.drawString("Name  :   " + nomIm,5,image.getHeight(null) + 20);
    		  //g.drawString("width :   " + image.getWidth(null) ,5,image.getHeight(null) + 40);
    		 // g.drawString("height :   " + image.getHeight(null),5,image.getHeight(null) + 60); 
    	   } 
     
    	public static void main(String[] args) {
    		Synthese synthese = new Synthese();
     
    	}
    }

  12. #12
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    en fait voilà je modifie le code de la façon suivante: alors que la methode filtreR est mise en commentaire , il m'affiche quand même l'image rouge !!!

    je ne comprend plus rien

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
     
     
    //import java.awt.Canvas;
     
    //import java.awt.Component;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    //import java.awt.MediaTracker;
    import java.awt.Rectangle;
     
    import java.awt.image.BufferedImage;
    import java.awt.Image;
     
     
    import java.net.URL;
     
     
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
     
    import javax.swing.JFrame;
     
    /*
     * Created on 14 févr. 2005
     *
     * 
     */
     
    /**
     * @author Ismail
     *
     * 
     */
    public class Synthese extends JFrame{
     
    	//private Image image;
    	private Image ImageR;
    	private Image ImageV;
    	private Image ImageB;
    	private Image ir;
    	private Image ib;
    	private Image iv;
     
    	private Container pane;
     
    	Synthese(){
    		this.setTitle("Synthese additive");
    		this.setSize(300,300);
    		this.setLocationRelativeTo(this);
    		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		pane = this.getContentPane();
    		pane.setLayout(new FlowLayout());
    	}
    	void dessinSynthese(URL URLImage,String nomImage){
    			/** Accès au toolkit : */
    			java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
    			/** lecture de l'image : */
    			//Image image = toolkit.getImage(URLImage);
    			Image ImageR = toolkit.getImage(URLImage);
    			Image ImageV = toolkit.getImage(URLImage);
    			Image ImageB = toolkit.getImage(URLImage);
     
    			System.out.println(ImageR.getHeight(null));
    			String nomImR = nomImage + "R";
    			String nomImV = nomImage + "V";
    			String nomImB = nomImage + "B";
    			//transformation de l'image en BufferedImage
    			BufferedImage ir = toBufferedImage(ImageR); 
    			BufferedImage ib = toBufferedImage(ImageB);
    			BufferedImage iv = toBufferedImage(ImageV);
    			//ir = filtreR(ir);
    			ib = filtreB(ib);
    			iv = filtreV(iv);
     
    				//JButton b = new JButton(new ImageIcon(ir)) ; 
    				//b.setSize(300,300); 
    				JButton b2 = new JButton(new ImageIcon(ib)) ; 
    				b2.setSize(300,300);
    				//pane.add(b);
    				pane.add(b2);
     
    			this.setVisible(true);
     
    		}
    	BufferedImage toBufferedImage(Image imageinit) {
    		Image image;
    		/** On test si l'image n'est pas déja une instance de BufferedImage */
    			if( imageinit instanceof BufferedImage ) {
    				/** cool, rien à faire */
    				return( (BufferedImage)imageinit );
    			} else {
    				/** On s'assure que l'image est complètement chargée */
    				image = new ImageIcon(imageinit).getImage();
                   /** On crée la nouvelle image */
     
    				BufferedImage bufferedImage = new BufferedImage(
    				imageinit.getWidth(null),
    				imageinit.getHeight(null),
    				BufferedImage.TYPE_INT_RGB );
    				Graphics g = bufferedImage.createGraphics();
    				g.drawImage(image,0,0,null);
    				g.dispose();
    				//filtreR(bufferedImage);		    
    				return(bufferedImage);
    			}
    	}
    	/*BufferedImage filtreR(BufferedImage imR){
    		int w = imR.getWidth(null);
    		int h = imR.getHeight(null);
    		for(int y = 0;y<h;y++){
    			for(int x = 0;x<w;x++){
    				int pixel = imR.getRGB( x, y );
    				imR.setRGB( x, y, pixel&0xFFFF0000 );
    			}
    		}
    		return(imR);
    		//repaint();
    	}*/
    	BufferedImage filtreB(Image imB){
    		   BufferedImage biB = toBufferedImage(imB);
    		   int w = imB.getWidth(null);
    		   int h = imB.getHeight(null);
    		   for(int y = 0;y<h;y++){
    			   for(int x = 0;x<w;x++){
    				   int pixel = biB.getRGB( x, y );
    				   biB.setRGB( x, y, pixel&0xFF0000F );
    			   }
    		   }
    		repaint();
    		   return(biB);
     
    	   }
    	BufferedImage filtreV(BufferedImage imV){
    		int w = imV.getWidth(null);
    		int h = imV.getHeight(null);
    	    for(int y = 0;y<h;y++){
    			for(int x = 0;x<w;x++){
    				int pixel = imV.getRGB( x, y );
    				imV.setRGB( x, y, pixel&0xFF00FF00 );
    			}
    		}
    		repaint();
    		return(imV);
     
    	}
    	public void paintComponent(Graphics g){ 
    		Rectangle rect = this.getBounds(); 
    		System.out.println("OK");
    		if(iv != null) { 
    			g.drawImage(iv, 0,0,iv.getWidth(null),iv.getHeight(null), null);
    			System.out.println("OK");
    		 }
    		/*if(ib != null) { 
    			g.drawImage(ib, 0,0,ib.getWidth(null),ib.getHeight(null), null); 
     
    		}*/
    		  else{System.out.println("image nulle ");}
    		//  g.drawString("Name  :   " + nomIm,5,image.getHeight(null) + 20);
    		  //g.drawString("width :   " + image.getWidth(null) ,5,image.getHeight(null) + 40);
    		 // g.drawString("height :   " + image.getHeight(null),5,image.getHeight(null) + 60); 
    	   } 
     
    	public static void main(String[] args) {
    		Synthese synthese = new Synthese();
    		//synthese.setVisible(true);
    	}
    }
    en fait j'ai meme l'impresssion que la methode paintComponen n'est pas appelée puisqu 'il ne m'affiche pas les messages "K"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de java heap space : creation buffered image!
    Par Battosaiii dans le forum Multimédia
    Réponses: 7
    Dernier message: 06/08/2007, 10h49
  2. Réponses: 1
    Dernier message: 24/05/2007, 21h20
  3. 1 image + 1 image = 1 image
    Par dleu dans le forum Delphi
    Réponses: 2
    Dernier message: 24/05/2006, 20h15
  4. Réponses: 5
    Dernier message: 07/03/2006, 12h09
  5. [swing][Buffered Image] memoire et lenteur sont les deux ...
    Par pierre.zelb dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 17/08/2005, 09h38

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