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

EDT/SwingWorker Java Discussion :

Comment faire un clear sur un beufferedImage toutes les x secondes!


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut Comment faire un clear sur un beufferedImage toutes les x secondes!
    salut je traite une petite imae video et je suis censé afficher le contenu suite à un traitement particulier , cet affichage est censé se faire toutes les x secondes...et je dosi momentanement effacer l'ancienen image avant de reiterer l'affichage ainsi de suite...comment je peux donc faire cela sachant que j'utilise l'objet graphics2D et bufferedImage comem suit :

    g.drawImage(bimg, 0, 0, this);
    ou :

    BufferedImage bimg;
    Graphics2D g ;

    donc comment proceder ?

    merci

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Salut,

    je pense que pour ce genre d'applications, la classe javax.swing.Timer est parfaite.

    Pour les vidéos, as-tu regardé du côté de JMF ? C'est fait pour ça (multimédia, réseau, etc). Mais c'est peut-être beaucoup pour ce que tu veux faire, à toi de voir.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    je veux juste savoir s'il ya une methode ou une possiblite pour que ce bufferedimage soit vidé en quelque sorte toutes les x secondes et reaffichée!! tu vois!

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Oui, dans ce cas, tu utilises un Timer qui, toutes les x secondes réécrit l'image (ou en crée une nouvelle), puis appelle repaint sur le composant sur lequel est affichée l'image.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    tu pourras me donner un exemple stp!! je suis vraiement bloqué!!!
    et comment je peux vider un bufferedimage!! merci

  6. #6
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    On ne peut pas "vider" une BufferedImage, on ne peut que réécrire son contenu.

    Pour ça, tu peux utiliser la méthode createGraphics qui te retourne un objet de type Graphics2D, qui te permet de dessiner sur l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Graphics2D g = monImage.createGraphics();
     
    g.setColor(Color.RED);
    g.fillRect(0, 0, monImage.getWidth() / 2, monImage.getHeight() / 2);
    Tu peux aussi utiliser les méthodes setRGB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // on met le pixel en haut à gauche en rouge
    monImage.setRGB(0, 0, 0x00FF0000);
    // alpha = 0
    // rouge = FF (255)
    // vert = 0
    // bleu = 0
    // couleur : rouge
    Ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // data est un tableau contenant les valeurs de l'image en ARGB
    int[] data = new int[monImage.getWidth(), monImage.getHeight()];
    // on remplit data
    ...
    // on réécrit l'image entière
    monImage.setRGB(0, 0, monImage.getWidth(), monImage.getHeight(), data, 0, monImage.getWidth());
    Si tu veux travailler avec un encodage de couleurs différent, il faut utiliser le Raster de l'image (getRaster()).

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oula xavlours. Ta technique est non seulement lente mais elle garantit que l'image ne sera plus acceleree par le materiel. On peut vider une image :

    Graphics2D g2 = image.createGraphics();
    g2.setComposite(AlphaComposite.Clear);
    g2.fillRect(0, 0, width, height);

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    Gfx ,

    ton code ne marche pas chez moi je ne sais pas pourquoi ;(!!

  9. #9
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Citation Envoyé par Gfx
    Oula xavlours. Ta technique est non seulement lente mais elle garantit que l'image ne sera plus acceleree par le materiel. On peut vider une image :
    Dans mes applications, setRGB est toujours allé plus vite que Graphics (je dessinais pixel par pixel aussi, ça doit jouer).

    Et d'après ce que j'ai compris, jlassyramzy veut vider l'image pour la remplir tout de suite après, donc je me suis dit "autant écrire par-dessus directement, si ça ne suffit pas il le verra bien".

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    au fait quelqu'un pourrait m'expliquer l'utilisation du Timer? est ce different de l'utilisation de la fonction sleep pour les threads? merci

  11. #11
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Voici un lien vers le tutorial de Sun. Il y a un exemple, JProgressBarDemo, qui utilise un Timer swing. C'est un peu différent des threads et de sleep, et il me semble que dans ton cas, c'est préférable.

    La différence principale, c'est que les actions du Timer swing seront exécutées par le thread EDT, qui gère tous les évènements graphiques, alors qu'avec sleep, tu ferais tout cela dans un thread à part. Ca pourrait poser quelques problèmes de concurrence d'avoir 2 threads qui manipulent l'affichage en même temps.

    Quant au traitement de la BufferedImage, je te conseille de chercher un tutorial sur java2D, parce que je ne suis pas un expert et je peux t'orienter vers des solutions qui ne seront pas géniales (comme Gfx l'a heureusement remarqué). Tu devrais avoir l'embarras du choix.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/05/2012, 14h27
  2. [Débutant] Comment on peut voir sur l'onglet toutes les procedures et fonctions
    Par xingjing910 dans le forum VB.NET
    Réponses: 3
    Dernier message: 04/04/2012, 10h49
  3. Comment faire une jointure sur toutes mes tables
    Par vevere dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/03/2011, 14h09
  4. comment faire un document XML qui référence toutes les URL
    Par abdallah2007 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 01/06/2007, 10h14
  5. comment faire un onClick sur toute la page?
    Par amartin dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/03/2007, 11h34

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