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 :

Enlever / Rajouter une image


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut Enlever / Rajouter une image
    Bonjour, j'affiche une image à l'aide de
    g.drawImage dans un paint(Graphic g), j'aimerais que lorsque j'appel de nouveau cette méthode je supprime l'image de mon panel et que j'affiche une nouvelle image.

    Affiche une nouvelle image j'ai juste à refaire le drawImage jusque là pas de problème, mais pour enlever l'image présente avant je n'y'arrive pas... J'ai essayé clearRect pour "effacer" mais comme mon image de fond est un décor ça me fait simplement un rectangle gris... j'ai essayé g.dispose() mais ça ne donne rien. J'aimerais donc savoir si quelqu'un pouvait il m'éclairer sur la façon dont je pourrais m'y prendre ! merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void paint(Graphic g){
     
    x++
    g.drawImage(img,x,100,null);
     
    }

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Je ne comprends pas vraiment ce qui doit rester ou être effacer (image, image de fond, fond, ...), quoi qu'il en soit la méthode paintComponent(Graphics) est plus adaptée au dessin dans un composant, par exemple le code suivant affiche une image sur un fond "propre" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
     
        g.drawImage(...);
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    Désolé pour le manque de compréhension ! Je vais préciser.

    J'utilise donc un panel avec un fond, avec le g.drawImage, j'y ajoute un personnage aux coordonnées x,100. Je veux le faire se déplacer... Donc j'affiche ce même personnage aux coordonnées x+1,100.. etc... mais il me faut effacer le personnage précedent, ce que je n'arrive pas à faire

    ps : je prends note pour la méthode ! merci

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Dans le principe, ça peut ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void moveCharacter() {
        imgX++;
        repaint(0, imgX-1, imgY, imgWidth+2, imgHeight);
    }
     
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(...);// fond
        g.drawImage(img, imgX, imgY, this);// personnage
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    le problème c'est que pour "créer" ma carte je me retrouve à devoir ajouter plusieurs images, donc de cette façon je vais devoir refaire à chaque fois un grand nombre de g.drawImage.

    Existerait il un moyen plus optimisé pour ce que je veux ? sinon je pense que je ferais ainsi, merci !

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Par défaut
    Bonjour,
    pourquoi ne dessinerais tu pas le fond sur une BufferedImage opaque et ton personnage sur une BufferedImage transparente que tu translaterais au fur et a mesure ?

  7. #7
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Si le problème est d'avoir un fond composé de plusieurs images qui n'évoluent pas dans le temps et d'éviter de tout redessiner à chaque affichage. Il est possible de dessiner une fois toutes les images dans un BufferedImage lors de la construction du JPanel. Puis d'utiliser le BufferedImage dans paintComponent(Graphics).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    Ben la "fond" évolue, il y'a des monstres qui se baladent, des objets qui disparaissent et d'autre chose encore..

  9. #9
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Dans un premier temps, tu peux déjà utiliser comme dans l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    repaint(0, imgX-1, imgY, imgWidth+2, imgHeight);
    qui permet de faire le minimum de mise à jour dans l'image.

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Oui mais seul cela ne suffit pas, il faut egalement dans la methode de dessin calculer si ce qu'on veut dessiner intersecte la zone de clip du Graphics et le dessiner ou pas en fonction du resultat obtenu.

    Ce calculs (qui sont tres rapides) et l'usage de cette variante de repaint() permettent une bien meilleure optimisation de l'affichage. Ensuite un complement d'acceleration materielle peut etre obtenu en utilisant des BufferedImage "compatibles" (faire recherche sur le forum a ce sujet).
    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

Discussions similaires

  1. enlever la bordure d'une image sur laquelle il y a un lien
    Par grinder59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 06/09/2006, 07h31
  2. rajouter du texte sur une image
    Par dietrich dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 31/03/2006, 16h20
  3. Enlever le cadre autour d'une image lien.
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/09/2005, 16h55
  4. [iText] Rajouter une image dans un pdf
    Par COCOLOLO dans le forum Documents
    Réponses: 2
    Dernier message: 06/04/2005, 17h01
  5. Enlever le boutton impression sur une image !
    Par Gab-Gab dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/11/2004, 23h30

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