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

AWT/Swing Java Discussion :

changement de Graphics


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut changement de Graphics
    bonjour

    j'ai fait un petit code que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void paint(Graphics g) {
    		super.paint(g);
    		if(paint1==1){
     
    		Color c = g.getColor();
    		g.drawImage(im,250,300,this);
    		g.setColor(Color.RED);
    		g.fillRect(10,10,80,80);
    		g.setColor(Color.BLUE);
    		g.fillOval(150,50,80,80);
    		g.setColor(c);
    		}
    qui est ma methode donc paint

    je charge une image et je l'affiche "im";

    jai decouvert que Graphics2D posseder la fonctionnaliter de redimentionner l'image elle meme alors jai remplacer mon code par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void paint(Graphics2D g) {
    		super.paint(g);
    		if(paint1==1){
     
    		Color c = g.getColor();
    		g.drawImage(im,250,300,10,10,this);
    		g.setColor(Color.RED);
    		g.fillRect(10,10,80,80);
    		g.setColor(Color.BLUE);
    		g.fillOval(150,50,80,80);
    		g.setColor(c);
    		}
    sauf que maintenant sa ne m'affiche plus rien....

    j'ai oublier de faire quelquechose??

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Salut,

    Ta méthode paint appartient à quelle classe ?

    Sinon pour dessiner une image, le mieux c'est d'hériter de JPanel et de redéfinir la méthode paintComponent(Graphics g) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public class MonPanel extends JPanel {
     
       protected void paintComponent(Graphics g){
                          super.paintComponent(g);
                          g2=(Graphics2D)g;
                          g2.drawImage(im,null,250,300);
                          //reste du code...
     
      }
    }


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    c'est bon j'ai resolu le probleme mais en fait avec ce Grafique2d c'est possible de redimensionner l'image??
    pas redimensionner l'ensemble mais afficher une partie de l'image a un endroit precis de la frame comme pour la fonction setBound(x,y,hauteur,largeur)??

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    non enf ait c'est pas resolu...
    je cherche toujour comment afficher une partie de mon image a un endroit preci de ma frame

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 857
    Points
    22 857
    Billets dans le blog
    51
    Par défaut
    Parmis les pistes de recherche :

    - Les variantes de drawImage() permettent de choisir les coordonnees d'affichage et les dimensions de l'image affichee (= redimensionnement).

    - BufferedImage dispose de la methode getSubimage() qui retourne une sous-image de la premiere tout en partagant les donnees des pixels entre les deux images (pas de duplication).

    - Si la solution precedente te deplais, sache que si tu positionnes correctement le clip de ton Graphics, alors rien de ce qui est en dehors de la zone de clip ne s'affiche. Donc si tu met la zone de clip a la forme/dimension/boite englobante de la partie de l'image que tu veux dessiner et si tu dessines ton image, seule la sous-image apparait...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    c'est exactement ce que je recherche le fait de faire une sous image contenant une partie de l'image d'origine et de l'afficher...

    jai rechercher tes pistes et jai touver que drawImage de Graphique2d posseder l'option dafficher un rectangle de limage dorigine et de l'afficher dans un rectangle dans la JFrame c'est a dire qu'en parametre on met les coordonnée du rectangle contenant la sous image

    et ensuite on l'affiche dans un rectangle.. j'ai donc fait ceci::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    ...
     
    g.drawImage(im,100,300,250,400,100,200,300,400,this);
    ...
    mais comme d'habitude rien ne s'affiche

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    quand tu parle de boite englobant la sous image de Graphique c'est de sa que tu parlait??(ce que je vient de poster??))

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 857
    Points
    22 857
    Billets dans le blog
    51
    Par défaut
    Imagine une BufferedImage de taille 500x500, si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Shape oldClip = graphics.getClip();
    graphics.setClip(new Rectangle(100, 100, 50, 50);
    graphics.drawImage(image, 0, 0, null);
    graphics.setClip(oldClip);
    Seule la sous image a (100x100, 150x150) sera affichee. Alternativement tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BufferedImate sub = image.getSubimage(100, 100, 50, 50);
    graphics.drawImage(sub, 100, 100, null);
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    d'accord si j'ai bien compris on defini un rectangle de dimension voulu et on l'affecte a une image pour n'afficher que le rectangle qui contient la partie de l'image..une derniere question si j'utilise ton deuxieme code ya t-il des declaration autre a faire?
    des paketage a importer?
    ou alors une simple methode paint sufit?

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 857
    Points
    22 857
    Billets dans le blog
    51
    Par défaut
    Arf mais y faut un peu arriver a utiliser la Javadoc soit-meme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.awt.Image
    java.awt.image.BufferedImage
    java.awt.Shape
    java.awt.Rectangle
    java.awt.Graphics
    java.awt.Graphics2D
    Non, on dit au Graphics de n'afficher que la partie visible au travers de la forme (ici un Rectangle, mais ca pourrait etre un Cercle, une Etoile, etc...). N'hesite pas a regarder la demo Java2Demo fournie avec le JDK (demo/jfc/java2d).

    La seconde version recupere directement une sous-image de la premiere. Conceptuellement c'est different mais dans ce cas precis le resultat est le meme.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    merci beaucoup!!
    je vais essayer sa desuite

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    c'est trés etrange....:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import java.awt.image.BufferedImage;
    ...
    Toolkit tk = Toolkit.getDefaultToolkit();
    		im = tk.getImage("carte_coeur.JPG");
    	sub = im.getSubimage(100, 100, 50, 50);
    ....
    public void paint(Graphics g) {
    		super.paint(g);
    		if(paint1==1){
     
    		Color c = g.getColor();
    		g.drawImage(sub, 100, 100, null);
    }
    et il ne trouve pas la methode getsubimage ???????

  13. #13
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 857
    Points
    22 857
    Billets dans le blog
    51
    Par défaut
    Car tu utilises une Image alors que cette methode est dans la classe BufferedImage. Plutot que d'utiliser Toolkit, charge donc plutot tes images avec ImageIO, outre le fait de t'eviter des problemes d'affichage si l'image n'est pas correctement chargee (cela vient de la nature de la maniere dont Toolkit fonctionne) tu auras directement le type correct.

    Sinon il y a egalement une entree dans la FAQ GUI sur la convertion d'Image en BufferedImage.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    si je recapitule je dois utiliser exactement le code que tu m'a donner en ayant pris soin de convertir mon image en bufferedImage ou tu m'a donner le tuto

    trés bien apres je pourrait utiliser tout ceci

    une autre question dans ce 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
    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();
     
                    return( bufferedImage );
            } 
    }
    on cré donc limage si elle n'es pas deja du type bufferdeImage donc ma est qu'on a pa besoin de mettre ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Graphics g = bufferedImage.createGraphics();
                    g.drawImage(image,0,0,null);
                    g.dispose();
    il se placera plutot dans ma methode paint n'est-ce pas?

  15. #15
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 857
    Points
    22 857
    Billets dans le blog
    51
    Par défaut
    Non car si tu faisais cela tu regénérerai une image à chaque fois que l'interface se ré-affiche. Donc on a plutot tendance à faire ce genre de conversion par exemple lors de l'initialisation de la classe dans le constructeur. Cependant, si tu avais pris la peine de lire la FAQ tu aurais vu comment directement charger une image du bon type (utiliser ImageIO).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    ok en fait avec toutes les informations que j'ai et avec tout les sites que je visite je m'embrouille un peu....

    j'essaye de recapituler ce que j'ai compris

    d'apres moi il faut que je charge une image ( apart avec le toolkit je ne sait pas comment faire a part aussi avec la fonction ImageIO.read() mais celle ci me renvoie un bufferImage.....)

    ensuite il faut que je definisse un rectangle de type bufferImage que va me prendre la partie de l'image que je veux afficher

    enfin afficher ce buffer a l'aide de drawImage()

    dite moi si je me trompe et aider moi a savoir comment charger l'image et la convertir en buffert ou je ne sait trop quoi...

    ou j'aimerai bien avoir une description de ce que j'ai a faire svp

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    :'(

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    j'ai lu la FAQ sinon d'ou je le sort le code precedent?? lol

    doonc dans le constructeur je charge une image avec le toolkit(puisque ImageIO marche pas)

    ensuite je la converti en buferImage

    je crée un bufferImage rectangle qui va contenir mon image

    et dans paint je l'affiche

    c'est bien cela ou je me trompe?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    bon ben sa fait trop longtemps que je galere a faire sa j'ai perdu trop de temps et je suis sur que c'est simple si une personne aurait l'extreme gentillesse de me donner le code pour prendre une partie de l'image "sans Titre.JPEG" et l'afficher sachant que j'ai une methode paint ce serait pas de refus

    je sais qu'il ne faut pas donner des codes comme sa mais je pense qu'apres une mois de recherche et mon projet remis a zero et recommencer je commence un peu a saturer....

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    OK CE fut bien laborieux mais c'est enfin resolut

    pour les interessé il suffit de charger l'image avec le toolkit (ce qui peut necessiter du temps mais comme mon projet est un jeu cela ne gene pas)

    ensuite il suffit de l'afficher a l'aide de DrawImage dans la methode paint() avec en parametre (x,y,x1,y1,x2,y2,x3,y3) ou x y x1 y1 represente le rectangle ou l'on veut afficher l'image

    et les autres parametre definissent le rectangle contenant la partie de l'image que l'on veut afficher

    merci a vous les moderateur de m'avoir appris de nouvelle chose !

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

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. Changement de l'icone d'une appli sous kdevelop
    Par vedder dans le forum Linux
    Réponses: 3
    Dernier message: 06/02/2003, 14h16
  3. Direct Graphics
    Par Blustuff dans le forum DirectX
    Réponses: 9
    Dernier message: 28/10/2002, 04h19
  4. Changement de langue dynamique (D6 et outils de traduction)
    Par agon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2002, 16h15
  5. URGENT : Zoom et changement de repère
    Par poca10 dans le forum MFC
    Réponses: 5
    Dernier message: 28/05/2002, 13h32

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