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

Multimédia Java Discussion :

Chargement d'image dans un matrice


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut Chargement d'image dans un matrice
    Bonjours,

    Avec le bout de code ci-desous, j'aimerais savoir:

    1. Si le constructeur de ma classe Case() charge une image, est ce que cette derniére sera mise dans ma matrice( grille[][] )?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    for(int i=0; i<longueur; i++)
    {
        for(int j=0; j<lareur;j++)
        {
             grille[i][j]=new Case();
        }
    }

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Dans ta matrice, tu auras une Case. Autrement dit, une référence à une Case...
    Si ta Case "contient" (référence) une image, tu pourras y accéder par un accesseur...

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Excuse moi, mais je n'ai pas bien compris ce que tu m'a expliqué. Peux tu reprendre dans les détailles stp

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 093
    Par défaut Salut,
    A mon avis, il suffit de mettre une methode public du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ImageIcon recupImage() {
    return new ImageIcon(ton image sous la forme d'un ImageIcon dans ce cas);
    }
    ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Image recupImage() {
    return tonImage; // une instance de l'objet Image
    }
    Imaginons maintenant que grille[0][0] contienne une instance de Case, il suffit de faire ((Case)grille[0][0]).recupImage();
    Cela suppose, et ce doit normalement être le cas que grille[][] est un Object[][]. Un tableau de tableau d'objet. Il faut donc caster, c'est l'interret d'écrire (Case)grille[0][0] car grille[0][0] renvoie un Object, et non pas un Case, il faut caster l'objet en Case pour que ce soit ton Case. Du coup, la methode recupImage() existe et renvoie l'objet comme définit plus haut.

    Je crois que c'est ce que voulait dire de manière très condensée la réponse précédente.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 093
    Par défaut Oublie....
    J'ai oublié de préciser que la methode recupImage() doit être écrite dans la classe Case bien sur...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    En effet, mon tableau est en faite un tableau de case. J'ai fiat le déclaration suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    protected Case[][] grille;
    Merci pour ta réponse, je vais l'appliquer et je te tiens au courant

  7. #7
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    J'ai implémenté ce sue tu m'as montré et, il me dit que je n'ai pas d'image dans ma case.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void creergrille(String s, int x, int y)
    	{
    		image=s;
     
    		grille[x][y]=new Case(image);
     
    		afficher(x,y);
    	}
    Pour savoir si grille[x][y] contient ma référence a mon image, j'appelle afficher()

    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
     
    public void afficher(int _x, int _y)
    	{
    				try
    				{
    					if(grille[_x][_y].getImage()==null);
    					{
    						System.out.println("Il n'y a pas d'image");
    					}
    				}
    				catch(Exception e)
    				{
    					grille[_x][_y].getImage();
    				}
    	}
    Je lui ai demandé de m'afficher seulement l'endroit que j'ai cliqué (par rapidité).

    Il m'affiche:"Il n'y a pas d'image".

    Pourquoi il me dit sa? Auriez vous une petite idée, svp

  8. #8
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Ok, mon probléme c résolu.
    j'ai écrit un fonction getImage et setImage qui, quand je fais grille[x][y].getImage() me renvoi l'image chargé dans ma case (Je rappel que grille[N][N] est un tableau de case).

    Par contre, je voudrais dessiner l'image que j'ai chargé dans la case sur lequel j'ai cliké et pour sa, je fais grille[x][y].paint(g,x,y) qui est en faitela fonction paint de case. Le probléme est que "g" est null.

    Comment faire pour qu'il sache que g est en faite l'image que j'ai chargé?

  9. #9
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Essaie encore de rappeler getGraphics() depuis l'image que tu as stockée.
    c.f. la doc.

  10. #10
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Je ne comprend pas grand choze.

    Voici les deux code en question:

    grille.java

    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
     
    import java.awt.Canvas;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;
     
    import javax.swing.*;
     
     
    public class grille extends JPanel
    {
    	String image;
    	Image i,img;
    	JPanel panel;
    	dessin d;
     
    	protected Case[][] grille;
     
    	public static final int largeur=50;
    	public static final int longueur=50;
     
    	//private static final Color couleurDesLignes = Color.white;
     
    	public static final int largeurCaseGraphique= 20;
     
    	public grille()
    	{
    		panel=new JPanel();
     
    		grille=new Case[longueur][largeur];
    		setSize(longueur * largeurCaseGraphique, largeur * largeurCaseGraphique);
     
    	}
     
    	public void init()
    	{
    		for(int i=0; i<longueur; i++)
    		{
    			for(int j=0; j<largeur; j++)
    			{
    				grille[i][j]=null;
    			}
    		}
    	}
     
     
    	public void creergrille(String s, int x, int y)
    	{
    		image=s;
     
     
    		System.out.println("image:" + " " + image);
     
    		grille[x][y]=new Case(image);
    		panel.add(grille[x][y]);
     
    		afficher(x,y);
    		paint(gr, x, y);
    	}
     
    	public void afficher(int _x, int _y)
    	{
     
    		//= (grille[_x][_y].getImage()).getGraphics();
     
    		System.out.println("grille" + "[" + _x + "]" + "[" + _y + "]" + " = " + grille[_x][_y].getImage());
     
    	}
     
    	public void paint(Graphics gr, int i, int j)
    	{
    		if(grille[i][j].getImage()!=null)
    		{
    			grille[i][j].paint(gr, i, j);
    		}
    	}
    }
    case.java

    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
     
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
     
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
     
    public class Case extends Canvas
    {
    	Image i,im, img;
    	String imageItem;
    	dessin d;
     
    	public static int TailleImage;
     
    	protected boolean franchissable;
    	protected boolean visible;
     
    	protected String image;
    	protected String combinaison;
     
     
    	public Case(String imageCase)
    	{
    		imageItem=imageCase;
     
    		franchissable=true;
    		visible=true;
     
    		Toolkit tk = Toolkit.getDefaultToolkit();
    		i = tk.getImage(imageItem+ ".jpg");
     
    		this.setPreferredSize(new Dimension(20,20));	
    		//TailleImage=i.getHeight(this);	
     
    		//System.out.println("gr=" + " " + gr);
    		this.setImage(i);
     
    	}
     
    	//Récup l'image et lui donne une nouvelle valeur
     
    	public Image getImage()
    	{
    		return this.img;
    	}
     
    	public void setImage(Image img)
    	{
    		if(this.img!=i)
    		{
    			this.img=i;
    		}
    	}
     
    	//Permet de savoir si une case est franchissable
     
    	public boolean isFranchissable()
    	{
    		return this.franchissable;
    	}
     
    	public void setFranchissable( boolean value)
    	{
    		if (this.franchissable!=value)
    		{
    			franchissable=value;
    		}
    	}
     
    	// Permet de savoir si une case est visible
     
    	public boolean isVisible()
    	{
    		return this.visible;
    	}
     
    	public void setVisible(boolean value)
    	{
    		if(this.visible!=value)
    		{
    			visible=value;
    		}
    	}
     
    	//Récup et donne une nouvelle combinaison à la case
     
    	public String getCombinaison()
    	{
    		return combinaison;
    	}
     
    	public void setCombinaison(String value)
    	{
    		if(this.combinaison!=value)
    		{
    			combinaison=value;
    		}
    	}
     
    	public void afficher(String ImageItem, int _x, int _y)
    	{
    		if(this.visible==true)
    		{
    			Toolkit tk = Toolkit.getDefaultToolkit();
    			i = tk.getImage(imageItem+ ".jpg");
    			repaint();
     
    			System.out.println("i=" + " " + i);
    		}
    	}
     
     
     
    	public void paint(Graphics gr, int _xx, int _yy)
    	{	
    		System.out.println("Appel Paint1");
     
    			if(this.visible==true)
    			{
    				System.out.println("Appel Paint2");
    				if(i!=null)
    				{
    					System.out.println("xx=" + " " + _xx);
    					System.out.println("yy=" + " " + _yy);
    					System.out.println("g=" + " " + gr);
     
    					gr.drawImage(i, _xx, _yy, this);
    					System.out.println("Appel Paint3");
    				}
    				else
    				{ 
    					System.out.println("PAS DE DESSIN");
    				}
    			}
    	}
    }
    Le truc c qu'i agit comme si je n'avait aucun chargement d'image, sa me prend la tête. Auriez vou un Id?

  11. #11
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Dsl, j'ai effacé une balise


    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
     
    import java.awt.Canvas;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;
     
    import javax.swing.*;
     
     
    public class grille extends JPanel
    {
    	String image;
    	Image i,img;
    	JPanel panel;
    	dessin d;
     
    	protected Case[][] grille;
     
    	public static final int largeur=50;
    	public static final int longueur=50;
     
    	//private static final Color couleurDesLignes = Color.white;
     
    	public static final int largeurCaseGraphique= 20;
     
    	public grille()
    	{
    		panel=new JPanel();
     
    		grille=new Case[longueur][largeur];
    		setSize(longueur * largeurCaseGraphique, largeur * largeurCaseGraphique);
     
    	}
     
    	public void init()
    	{
    		for(int i=0; i<longueur; i++)
    		{
    			for(int j=0; j<largeur; j++)
    			{
    				grille[i][j]=null;
    			}
    		}
    	}
     
     
    	public void creergrille(String s, int x, int y)
    	{
    		image=s;
     
     
    		System.out.println("image:" + " " + image);
     
    		grille[x][y]=new Case(image);
    		panel.add(grille[x][y]);
     
    		afficher(x,y);
    		paint(gr, x, y);
    	}
     
    	public void afficher(int _x, int _y)
    	{
     
    		//= (grille[_x][_y].getImage()).getGraphics();
     
    		System.out.println("grille" + "[" + _x + "]" + "[" + _y + "]" + " = " + grille[_x][_y].getImage());
     
    	}
     
    	public void paint(Graphics gr, int i, int j)
    	{
    		if(grille[i][j].getImage()!=null)
    		{
    			grille[i][j].paint(gr, i, j);
    		}
    	}
    }
    case.java
    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
     
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
     
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
     
    public class Case extends Canvas
    {
    	Image i,im, img;
    	String imageItem;
    	dessin d;
     
    	public static int TailleImage;
     
    	protected boolean franchissable;
    	protected boolean visible;
     
    	protected String image;
    	protected String combinaison;
     
     
    	public Case(String imageCase)
    	{
    		imageItem=imageCase;
     
    		franchissable=true;
    		visible=true;
     
    		Toolkit tk = Toolkit.getDefaultToolkit();
    		i = tk.getImage(imageItem+ ".jpg");
     
    		this.setPreferredSize(new Dimension(20,20));	
    		//TailleImage=i.getHeight(this);	
     
    		//System.out.println("gr=" + " " + gr);
    		this.setImage(i);
     
    	}
     
    	//Récup l'image et lui donne une nouvelle valeur
     
    	public Image getImage()
    	{
    		return this.img;
    	}
     
    	public void setImage(Image img)
    	{
    		if(this.img!=i)
    		{
    			this.img=i;
    		}
    	}
     
    	//Permet de savoir si une case est franchissable
     
    	public boolean isFranchissable()
    	{
    		return this.franchissable;
    	}
     
    	public void setFranchissable( boolean value)
    	{
    		if (this.franchissable!=value)
    		{
    			franchissable=value;
    		}
    	}
     
    	// Permet de savoir si une case est visible
     
    	public boolean isVisible()
    	{
    		return this.visible;
    	}
     
    	public void setVisible(boolean value)
    	{
    		if(this.visible!=value)
    		{
    			visible=value;
    		}
    	}
     
    	//Récup et donne une nouvelle combinaison à la case
     
    	public String getCombinaison()
    	{
    		return combinaison;
    	}
     
    	public void setCombinaison(String value)
    	{
    		if(this.combinaison!=value)
    		{
    			combinaison=value;
    		}
    	}
     
    	public void afficher(String ImageItem, int _x, int _y)
    	{
    		if(this.visible==true)
    		{
    			Toolkit tk = Toolkit.getDefaultToolkit();
    			i = tk.getImage(imageItem+ ".jpg");
    			repaint();
     
    			System.out.println("i=" + " " + i);
    		}
    	}
     
     
     
    	public void paint(Graphics gr, int _xx, int _yy)
    	{	
    		System.out.println("Appel Paint1");
     
    			if(this.visible==true)
    			{
    				System.out.println("Appel Paint2");
    				if(i!=null)
    				{
    					System.out.println("xx=" + " " + _xx);
    					System.out.println("yy=" + " " + _yy);
    					System.out.println("g=" + " " + gr);
     
    					gr.drawImage(i, _xx, _yy, this);
    					System.out.println("Appel Paint3");
    				}
    				else
    				{ 
    					System.out.println("PAS DE DESSIN");
    				}
    			}
    	}
    }
    Le truc c qu'il agit comme si je ne faisait pas de chargement d'image, pouvez vous m'aider a savoir pkoi il fait sa?

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/03/2008, 14h29
  2. chargement des images dans une table
    Par sandy07 dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2007, 09h37
  3. Réponses: 3
    Dernier message: 05/03/2007, 22h55
  4. Chargement d'image dans une application graphique
    Par chocoboy dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2006, 21h29
  5. [JLabel] Chargement d'image dans une JFrame
    Par mr.t dans le forum Composants
    Réponses: 10
    Dernier message: 27/01/2005, 18h32

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