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 :

Java 2D


Sujet :

2D Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut Java 2D
    Bonjour,

    J'utilise la méthode drawImage que j'ai placé dans paint pour afficher une nouvelle image toutes les secondes.
    Le but est, si vous voulez, de reproduire +/- une vidéo mais à 1 frame par seconde.
    Le problème c'est qu'il y a un clignotement entre chaque changement d'image. On dirait qu'il faut le temps que l'image s'efface puis que la nouvelle se dessine.
    Savez-vous si c'est possible à corriger?

    Merci d'avance!

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Oui mais montre-nous ton code de dessin

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut
    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 addImage(byte[] buffImg)
    {
    	Toolkit toolkit = getToolkit();
    	img = toolkit.createImage(buffImg);
    	this.repaint();	
    }
     
    public void paint(Graphics g) 
    {
    	super.paint(g);
    	Dimension d = getSize();
    	Insets i = getInsets();
    	g.drawImage(img, i.left, i.top, d.width - i.left - i.right, d.height - i.top - i.bottom, this );
    }
    Le problème ne vient pas de la méthode repaint qui efface l'image précédente avant d'afficher la nouvelle?
    Est-il possible d'appeler paint autrement?

    Merci

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    L'appel a repaint() est bon. Est-ce que ton image recouvre toute la surface ? Est-ce que tu utilises AWT ou Swing ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut
    Le problème c'est que c'est des images de 800x600 mais assez légère vu qu'elles sont au format png.

    J'affiche les images dans une JDialog, et l'image recouvre tout le JDialog.

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Tu surcharges la methode paint() du JDialog ? Si oui, essaye a la place de deriver d'un JComponent en mettant setOpaque(true) ou d'un JPanel et en copiant ta methode paint() dedans.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut
    Dans le style de cet exemple ci : http://www.uta.fi/~jl/pguibook/examples/Image_Java/DrawImage_java.html ?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    C'est ce que tu utilises ? Curieux... Tu as du code que je pourrais executer pour tester ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut
    C'est juste un exemple que j'ai trouvé sur google et que je viens de tester (vu que tu me proposais de faire un extends d'un JPanel) mais ça ne change rien au problème.

    En fait j'envois les images par le réseau (via JXTA), je les reçois et je les affiche, donc c'est assez dur de te faire tester.

    La classe complète :




    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
     
    public class dialRemoteDesktop extends JPanel 
    {
    	private Image img = null;
    	/**
             * This is the default constructor
             */
    	public dialRemoteDesktop() 
    	{
    		try
    		{
    			JFrame f = new JFrame();
    			f.addWindowListener(new WindowAdapter() {
    			  public void windowClosing(WindowEvent e) {
    			  System.exit(0);
    			  }
    			});
    			f.getContentPane().add(this);
    			f.setBounds(0,0,800,600);
    			f.setVisible(true);
    		} 
    		catch (Exception r) 
    		{
    			  System.out.println("Usage: java DrawImage <imagefile>");
    			  System.exit(0);
    		 }
     
    	}
     
    	public void addImage(byte[] buffImg)
    	{
    		Toolkit toolkit = getToolkit();
    		img = toolkit.createImage(buffImg);
    		this.repaint();		
    	}
     
    	public void paint(Graphics g) 
    	{
    		super.paint(g);
    		Dimension d = getSize();
    		Insets i = getInsets();
    		g.drawImage(img, i.left, i.top, d.width - i.left - i.right,
    d.height - i.top - i.bottom, this );
    	}
    }
    La méthode addImage est appelée dès qu'on reçoit les bytes d'une image via le réseau.
    Ca fonctionne nickel sauf ce scintillement qui fait mal aux yeux...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut
    Pour éviter le clignotement, il n'y a pas moyen de superposer les images plutôt que d'effacer l'image et dessiner la nouvelle?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Essaye de remplacer public void paint par protected void paintComponent et enleve la ligne super.paint...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Par défaut
    IMPEC!
    Merci, tu es un chef!
    C'est quoi la différence entre paint et paintComponent?
    Qu'est ce qui fait que une fait un clignotement et pas l'autre?
    Encore merci (je peux aller manger l'esprit tranquil grâce à toi )

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

Discussions similaires

  1. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  2. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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