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

Graphisme Java Discussion :

affichage partiel image


Sujet :

Graphisme Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Points : 65
    Points
    65
    Par défaut affichage partiel image
    bonjour,

    j'utilise une bufferedimage et je trace à l'intérieur des lignes, le problème c'est que l'image s'efface à chaque nouvel appel pour dessiner des lignes ? ça peut venir d'où ?

    Merci

    Greg

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par greg08 Voir le message
    ça peut venir d'où ?
    De ton code
    Et sans boule de cristal, il va falloir que tu postes un peu plus de code

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Points : 65
    Points
    65
    Par défaut re
    où trouve t-on une boule de cristale ? j'en veux une !!!! lol
    sinon je crois que je me plante complètement de méthode, je dois dessiner des lignes au fur et à mesure avec cadence à l'écran, je dessine zone par zone, un peu comme des lettres... je sais pas si je suis bien clair !!

    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
    public void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		Dimension dim = getSize();
    		int w = dim.width;
    		int h = dim.height;
     
    		bi = (BufferedImage)createImage(w, h);
    		big = bi.createGraphics();
    		big.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     
     
     
    	    big.setColor(Color.RED);
    	    for (int t= 1; t< nblines; t++){
    			big.draw(new Line2D.Double(a,b,c,d);
    	    	g.drawImage(bi,a,b,c,d,a,b,c,d,this);
    	    }
     
    	  }
     
    }
    à l'écran je n'ai que soit la dernière partie soit rien du tout ! j'ai simplifié abcd c'est calculé en fait

    merci

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Points : 65
    Points
    65
    Par défaut re
    à chaque passage dans paint j'ai de nouvelle ligne à afficher, je ne désire pas effacer les anciennes

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Procédure générale, parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    1. créer une image (BufferedImage par exemple)
    2. extraire l'objet Graphics associé à l'image
    3. dans un Thread, faire successivement :
        3.1 afficher un trait sur le Graphics
        3.2 appel de repaint sur l'objet contenant la méthode "paintComponent"
        3.3 faire une pause
        3.4 a la fin du Thread, faire un "dispose" sur le Graphics
    4. dans paintComponent, afficher uniquement l'image créée à l'étape 1.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Points : 65
    Points
    65
    Par défaut merci
    je comprends pas à quoi sert le Thread ? tu as un lien pour exemple ?

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Points : 65
    Points
    65
    Par défaut re
    cela veut dire qu'il faut enregistrer toutes les formes dans des éléments comme des taleaux puis les afficher ? on ne peut pas écrire dans une bufferedimage sans qu'elle ne s'efface ?

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 869
    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 869
    Points : 22 932
    Points
    22 932
    Billets dans le blog
    53
    Par défaut
    Citation Envoyé par greg08 Voir le message
    cela veut dire qu'il faut enregistrer toutes les formes dans des éléments comme des taleaux puis les afficher ? on ne peut pas écrire dans une bufferedimage sans qu'elle ne s'efface ?
    L'image ne peut pas s'effacer sauf si tu la reinitialises ou si tu effaces son contenu manuellement. Au nouveau pas de temps, tu te contentes de dessiner la nouvelle ligne. A priori la seule chose que tu as besoin de stocker c'est l'endroit ou dessiner la nouvelle ligne (voir carrement pas du tout si ceci peut se calculer en fonction du pas de temps et du temps actuel).

    La Thread sert a faire l'ajout de ligne a un pas de temps regulier, ce qui est ce que tu demandes dans la description de ton probleme.

    je dois dessiner des lignes au fur et à mesure avec cadence à l'écran

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Voici un exemple trivial. Un clic dans la fenêtre démarre le dessin, un autre clic met l'animation en pause. Comme tu peux le voir, toute la logique de construction du dessin se trouve dans le Thread (méthode "run") :
    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
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Dessin extends JPanel implements Runnable
    {
    	public static void main( String[] arg )
    	{
    		Dessin inter = new Dessin();
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    		frame.getContentPane().add( inter );
    		frame.pack();
    		frame.setVisible( true );
    	}
     
    	private Thread				animator;
    	private BufferedImage		image;
    	private Graphics2D			graph;
    	private final static int	largeur	= 800;
    	private final static int	hauteur	= 600;
    	private boolean				pause	= true;
     
    	public Dessin()
    	{
    		animator = new Thread( this );
    		image = new BufferedImage( largeur, hauteur, BufferedImage.TYPE_INT_ARGB );
    		graph = image.createGraphics();
    		graph.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
    		animator.start();
    		addMouseListener( new MouseAdapter()
    		{
    			public void mouseClicked( MouseEvent event )
    			{
    				swap();
    			}
    		});
    	}
     
    	@Override
    	public Dimension getPreferredSize()
    	{
    		return new Dimension( largeur, hauteur );
    	}
     
    	public synchronized void swap()
    	{
    		pause = !pause;
    		notify();
    	}
     
    	public void run()
    	{
    		Thread current = Thread.currentThread();
    		int x = 0;
    		int xOld = 0;
    		int y = 0;
    		int yOld = 0;
    		graph.setColor( Color.BLACK );
    		while( animator == current )
    		{
    			if( pause )
    			{
    				synchronized( this )
    				{
    					while( pause )
    					{
    						try { wait(); }
    						catch( InterruptedException ex ) {}
    					}
    				}
    			}
     
    			x = (int) ( Math.random() * largeur );
    			y = (int) ( Math.random() * hauteur );
    			graph.drawLine( xOld, yOld, x, y );
     
    			repaint();
     
    			xOld = x;
    			yOld = y;
     
    			try { Thread.sleep( 200 ); }
    			catch( InterruptedException exc ) {}
    		}
    	}
     
    	public void paintComponent( Graphics g )
    	{
    		super.paintComponent( g );
    		g.drawImage( image, 0, 0, this );
    	}
    }

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Points : 65
    Points
    65
    Par défaut merci
    c'est super sympa, je galère depuis 3 jours là dessus ...

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

Discussions similaires

  1. [FLASH MX] Affichage d'images par loadMovie
    Par n_tony dans le forum Flash
    Réponses: 7
    Dernier message: 23/09/2004, 16h34
  2. XSL: pb d'affichage d'images
    Par enez dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/09/2004, 15h17
  3. PB affichage d'image avec IE
    Par arturo dans le forum Modules
    Réponses: 6
    Dernier message: 25/09/2003, 18h28
  4. [VB6] Affichage d'image avec qlq contraintes
    Par youri dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 15h44

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