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 :

Paint en java


Sujet :

2D Java

  1. #1
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut Paint en java
    Bonjour à tous,

    Je suis en train de faire une sorte de Paint avec java. J'applique le modèle MVC. Le coeur de ma petite application est un cadre (Cadre.java). Dans ce cadre se trouve un tableau de Color[][] qui représentent chaque pixel d'une image. Une vue (VueCadre.java) surveille en permanence ce cadre. C'est à dire qu'à chaque fois qu'un pixel change dans le cadre, il est affiché dans la vue. Ensuite, à partir du cadre, je peux dessiner (sans utiliser les classes prédéfinies de java.awt comme Graphics ou Graphics2D). C'est de là que vient mon premier souci. En effet, lorsque je dessine par exemple des rectangles ou des ellipses, java met beaucoup de temps à les dessiner. Est-ce du au fait que mon image soit sans arrêt redessiner lorsqu'un pixel change dans le cadre ?
    Dans VueCadre.java, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void update(Observable obs, Object obj)
    {
    	...
    	g = getGraphics();
    	x = cadre.getX(); // Retourne la position de la souris dans le cadre
    	y = cadre.getY(); // Pareil
    	Outils.drawPixel(g,x,y,cadre.getPixel(x,y)); // Dessine seulement le pixel modifié dans le JPanel
    	...
    }
    Sinon, mon application gère aussi la sauvegarde et l'ouverture de fichiers du type *.draw (format personnel), *.bmp (sans table de couleurs) et *.pgm (images à nuances de gris). Quand j'ouvre par exemple une image 200x200, je n'ai pas de soucis (sauf qu'elle met un peu de temps à s'ouvrir) mais si je veux ouvrir une image *.bmp de dimension 1100x1500 alors je suis obligé d'augmenter la mémoire vive de JVM (Xmx128m au lieu de Xmx64m). Je voudrais résoudre ce problème. J'ai remarqué que ce problème venait de ma classe IO.java (classe statique qui regroupe mes fonctions d'E/S). C'est quand je retourne une couleur (new Color(...)) à chaque fois que je lis un pixel dans une image *.bmp :

    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
     
    public static Color readBMPColor(DataInputStream stream)
    {
    	int r, g, b;
    	r = g = b = 255;
    	byte[] octets = new byte[3];
     
    	try
    	{
    		stream.read(octets);
    		b = octets[0] & MASK; // avec MASK = 0xFF
    		g = octets[1] & MASK;
    		r = octets[2] & MASK;
    	}
    	catch(IOException ex){}
     
    	return new Color(r,g,b);
    }
    En résumé, je voudrais améliorer la vitesse d'exécution de mon application. Je pense que cette lenteur vient de mon code (peut-être mal codé). Auriez-vous des idées pour optimiser un peu mon code ?

    PS : Mon application n'est pas très volumineuse. Vous pouvez la télécharger ici draw.zip. Les classes on été compilées avec la version 1.6 de java. Pour lancer l'application, faites ./draw.csh (si vous avez linux ou cygwin avec csh) ou java draw/graphique/Draw &. Vous trouverez également la doc dans le fichier *.zip.

    Merci de votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Points : 120
    Points
    120
    Par défaut
    Salut, evidemment que c'est long avec un tableau de Color (compte un peu le nombre d'objets couleurs que doit mettre en memoire ta jvm)
    Commence par enregistrer uniquement les caracteres visibles.
    Peut etre n'utilise pas l'objet Color mais travaille avec des nombres (codage RGB).
    Et utilise le vectorielle. C'est a dire que si tu fais une ligne tu enregistre uniquement x1,y1,x2,y2 et non pas tout les points de la ligne.

  3. #3
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Pour les couleurs, je vais donc travailler avec un entier du type :
    rgb = r + g * 256 + b * 256 ^ 2
    avec
    r = rgb % 256
    g = (rgb / 256) % 256
    b = (rgb / 256 ^ 2) % 256

    A moins que tu pensais à un objet Couleur par exemple avec trois entiers r, g et b ? Mais ceci revient à étendre Color je pense...
    Sinon, pour les lignes, je suis obligé d'enregistrer tous les points.
    Merci pour ton aide.
    Si d'autre personnes ont des propositions d'optimisation alors elles sont les bienvenues.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Une image, c'est beaucoup de pixels. Par exemple :
    - une imagette : 100x100 => 10000
    - un image plein ecran : 1280x1024 => 1310720
    - un image d'un appareil photo : 2560x2048 => 5242880
    Si tu mets un objet par pixel, ca fait beaucoup d'objets au final, et donc:
    - il faut du temps pour creer tous ces objets
    - il faut de la memoire (il faut au moins doubler par rapport à une conception ou un pixel est represente par un int).
    Pour le trace, c'est pareil. Si le trace d'un pixel prend 1ms, pour une image de 10000 pixels, ca fait déjà 10s.

    Pour optimiser, il vaudrait mieux utiliser des objets de type BufferedImage, ou peut être
    MemoryImageSource.

    Enfin, ce que tu as ecrit est par super optimum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rgb = r + g * 256 + b * 256 ^ 2
    r = rgb % 256
    g = (rgb / 256) % 256
    b = (rgb / 256 ^ 2) % 256
    Ecris plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rgb = r | (g << 8)  | (256 <<16);
    r = rgb & 0xFF;
    g = (rgb >> 8) & 0xFF;
    b = (rgb >> 16) & 0xFF;
    Les decalages de bit, c'est plus rapide que les divisions, les modulos et les puissances.

  5. #5
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Je dois les mettre où les BufferedImage ? Je dois remplacer mon cadre par ce type d'objet par exemple ? En lisant un peu la javadoc, je vois que l'on peut récupérer le graphics de l'image ! Cela veut dire que je peux dessiner dans le graphics de l'image buffer avec les méthodes prédéfinies de la classe Graphics ? Car dans mon application, j'utilise un cadre dans lequel je dessine mes propres figures (trait, rectangle, ellipse...). J'étais obligé d'écrire ces méthodes pour que l'image qui apparaît à l'écran soit permanente (car en dessinant dans le graphics du JPanel, l'image n'était pas permanente lorsque l'on déplaçait la JFrame en dehors de l'écran). Peut-on utiliser une BufferedImage pour remplacer mon cadre ? Si oui, comment ferais-tu pour assurer le rafraîchissement de l'image avec le modèle MVC ?
    Sinon, pour la formule avec décalages de bits, ça serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rgb = r | (g << 8) | (b << 16);
    r = rgb & 0xFF;
    g = (rgb >> 8) & 0xFF;
    b = (rgb >> 16) & 0xFF;
    J'attends tes réponses avec impatience.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    C'est le dessin que tu affichais s'effacait, c'est que tu as loupé un truc.

    Je te conseille de lire
    ce point (et le suivant) de la faq
    http://java.developpez.com/faq/gui/?...QUE_DESSIN_g2d
    ce post
    http://www.developpez.net/forums/sho...d.php?t=350628
    et ce cours
    http://www-igm.univ-mlv.fr/~berstel/...a/8-Dessin.pdf

    Je pense que ca t'aidera beaucoup.

    Pour le bout de code, effectivement c'est b et pas 256.

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 62
    Points : 75
    Points
    75
    Par défaut
    Dans la méthode paint utilise la méthode drawImage pour dessiner ton buffered image.
    Ensuite si tu travaille en mvc, tu peut choisir d'effectuer les traitements des images dans le modèle. Une foi ces traitements effectuer le modèle notifie la vue. La vue va chercher les informations dans le modèle (ici en l'occurence ta vue peut contenir une instance de bufferedImage qu'elle remplacera à chaque notification par une instance contenue dans le modèle). Une foie l'image chargée utilise la méthode repaint pour repeindre ton component.
    Tu peut utiliser le component de ton choix.

  8. #8
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Tout ceci est parfait. Je vais revoir mon application. Merci à tous surtout à Sanguko.

  9. #9
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    salut @ toi mathieumadrid , (et les autres)

    mais je m'adresse particulièrement à toi


    dans ton applis
    dans ta class Outils
    dans la méthode remplir
    tu utilise une méthode pop() sur une LinkedList, elle est où cette méthode pop()
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  10. #10
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Salut,

    Regarde à la ligne 213 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    draw.sources.Point p = (draw.sources.Point)ll.pop();

  11. #11
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    mais dans ta classe Point
    il n'y a pâs de méthodes pop()

    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
    package draw.sources;
     
    /** Point de coordonnÈes (x,y).<br>
     * Point reprÈsentÈ dans ce plan :<br>
     * +----------> x<br>
     * |<br>
     * |<br>
     * |<br>
     * v<br>
     * y
     * @author COLIN Mathieu
     * @version 1.0.0
     */
    public class Point
    {
    	/** Abscisse du point. */
    	protected int x;
     
    	/** OrdonnÈe du point. */
    	protected int y;
     
    	/** CrÈe un point.
             * @param x Abscisse.
             * @param y OrdonnÈe.
             */
    	public Point(int x, int y)
    	{
    		this.x = x;
    		this.y = y;
    	}
     
    	/** Retourne l'abscisse.
             * @return Abscisse.
             */
    	public int getX()
    	{
    		return x;
    	}
     
    	/** Retourne l'ordonnÈe.
             * @return OrdonnÈe.
             */
    	public int getY()
    	{
    		return y;
    	}
    }
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  12. #12
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Je fait un dépilement (pop) sur l'objet LinkedList ll:

    Je fais juste que caster l'élément dépilé qui est un Point car la fonction pop() de la classe LinkedList retourne un objet.

  13. #13
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par mathieumadrid
    la fonction pop() de la classe LinkedList retourne un objet.
    Je ne vois pas de méthod pop() dans la classe LinkedList
    http://java.sun.com/j2se/1.4.2/docs/...inkedList.html
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  14. #14
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Regarde dans la version 1.6 de java. (Pas dans la 1.4.2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pop() Pops an element from the stack represented by this list.
    Regarde ici : http://java.sun.com/javase/6/docs/ap...inkedList.html

  15. #15
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    a oki c'est déveloper avec la version 6 de java

    enfaite pourqui-oi déclare tu des méthodes statiques ?

    tu déclare dans la classs Outils une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void remplir(Cadre cadre, int x, int y, Color c)
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  16. #16
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    C'est vrai que c'est pas bien. (On va dire que Java ce n'est pas du C etc...). J'aurais du mettre cette méthode dans la classe Cadre. Je fais toujours des classes avec des fonctions assez générales que j'utilise un peu partout dans mon application. La méthode est statique, ça veut dire que l'on peut l'utiliser dans d'autres classes en faisant :
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import draw.Outils.*;
    ...
    remplir(...);
    Dernière méthode à confirmer (je crois que ça dépend des versions de Java)

  17. #17
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    En fait Sanguko, si j'ai bien compris, je dois enregistrer les pixels de mon panel dans une BufferedImage. Et je dois dessiner dans le panel avec paintComponent(Graphics g). Cela veut dire que je n'ai plus besoin de ma classe Cadre (qui représentait l'image du panel) avec le modèle MVC. J'ai juste besoin d'écouteurs qui dessineront dans le panel avec repaint(). C'est bien ça ? Sinon, je vois pas trop comment faire pour récupérer les pixels du panel dans une BufferedImage ?! Enfin, l'optimisation des couleurs ne sert à rien dans cette nouvelle façon de faire ?

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Citation Envoyé par mathieumadrid
    En fait Sanguko, si j'ai bien compris, je dois enregistrer les pixels de mon panel dans une BufferedImage.
    C'est sans doute la solution la plus simple
    Citation Envoyé par mathieumadrid
    Et je dois dessiner dans le panel avec paintComponent(Graphics g). Cela veut dire que je n'ai plus besoin de ma classe Cadre (qui représentait l'image du panel) avec le modèle MVC. J'ai juste besoin d'écouteurs qui dessineront dans le panel avec repaint(). C'est bien ça ?
    oui
    Citation Envoyé par mathieumadrid
    Sinon, je vois pas trop comment faire pour récupérer les pixels du panel dans une BufferedImage ?
    Si la BufferedImage represente le contenu de ton panel, tu n'as pas besoin de recuperer les pixels du panel.
    Par contre, tu peux utiliser les methodes BufferedImage.getRGB(...) pour recuperer les valeurs de pixels directement

    Citation Envoyé par mathieumadrid
    ! Enfin, l'optimisation des couleurs ne sert à rien dans cette nouvelle façon de faire ?
    C'est sans doute moins utile. Mais garde la de cote, si tu travailles sur les pixels, tu en auras besoin un jour ou l'autre.

  19. #19
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Pour tester un peu tout ça, j'ai pris l'exemple du crayon. J'ai quelques soucis de compréhension. D'abord, quand je crée mon image, elle toute noire. Comment faire pour qu'elle soit blanche ? Ensuite, j'ajoute des écouteurs à mon panel pour pouvoir dessiner avec ma souris. Dans ceux-ci, je récupère le Graphics de l'image et je dessine dedans. Par contre, dans la méthode paintComponent, je dessine mon image. J'ai pas trop compris l'écouteur placé en quatrième argument de la méthode drawImage ! Bref, quand je dessine, je rappelle indirectement la méthode paintComponent avec repaint et il me redessine l'image (je crois). Est-ce rapide de redessiner l'image à chaque fois ? Sinon, j'ai voulu faire un peu beau en utilisant la méthode setRenderingHint mais par exemple, je ne vois pas l'efficacité de l'anti-aliasing !? Voici le code de mon panel. Je voudrais savoir si je suis sur la bonne voie. Merci.

    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
    package draw.graphique;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import java.awt.event.*;
     
    public class JCadre extends JPanel
    {
    	public Image image;
    	public int width, height;
    	public Graphics2D g2d;
    	public int x, y, x0, y0;
     
    	public JCadre(int width, int height)
    	{
    		this.width = width;
    		this.height = height;
    		setPreferredSize(new Dimension(width,height));
    		image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    		addMouseMotionListener(new MouseMotionDessiner());
    		addMouseListener(new MouseDessiner());
    	}
     
    	public void paintComponent(Graphics g)
    	{
    		g2d = (Graphics2D)g;
    		super.paintComponent(g2d);
    		g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_SPEED);
    		g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,RenderingHints.VALUE_COLOR_RENDER_SPEED);
    		g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
    		g2d.setRenderingHint(RenderingHints.KEY_DITHERING,RenderingHints.VALUE_DITHER_DISABLE);
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    		g2d.drawImage(image,0,0,this);
    	}
     
    	private class MouseMotionDessiner implements MouseMotionListener
    	{
    		public void mouseDragged(MouseEvent e)
    		{
    			g2d = (Graphics2D)image.getGraphics();
    			x = e.getX();
    			y = e.getY();
    			g2d.setColor(Color.WHITE);
    			g2d.setStroke(new BasicStroke(2));
    			g2d.drawLine(x0,y0,x,y);		
    			x0 = x;
    			y0 = y;
    			repaint();
    		}
     
    		public void mouseMoved(MouseEvent e){}
    	}
     
    	private class MouseDessiner implements MouseListener
    	{
    		public void mousePressed(MouseEvent e)
    		{
    			x0 = e.getX();
    			y0 = e.getY();
    		}
     
    		public void mouseReleased(MouseEvent e){}
    		public void mouseExited(MouseEvent e){}
    		public void mouseEntered(MouseEvent e){}
    		public void mouseClicked(MouseEvent e){}
    	}
    }

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Citation Envoyé par mathieumadrid
    Comment faire pour qu'elle soit blanche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    g2d = (Graphics2D)image.getGraphics();
    g2d.setColor(Color.white);
    g2d.fillRect(0,0,width,height);
    Citation Envoyé par mathieumadrid
    Est-ce rapide de redessiner l'image à chaque fois ?
    A priori, oui. Le mieux c'est d'essayer.

    Citation Envoyé par mathieumadrid
    Sinon, j'ai voulu faire un peu beau en utilisant la méthode setRenderingHint mais par exemple, je ne vois pas l'efficacité de l'anti-aliasing !?
    Ca se voit surtout les textes, les lignes obliques.

    Citation Envoyé par mathieumadrid
    Je voudrais savoir si je suis sur la bonne voie.
    oui

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

Discussions similaires

  1. methode paint en java
    Par saheliano dans le forum 2D
    Réponses: 7
    Dernier message: 10/05/2010, 09h06
  2. Méthode paint Java
    Par dawaman dans le forum 2D
    Réponses: 1
    Dernier message: 02/04/2010, 11h55
  3. Chaine d'appel de paint(), java.awt
    Par Cbonniot dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 22/12/2009, 11h12
  4. paint java 5 et java 6
    Par atha2 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 07/11/2007, 14h42
  5. [graphics] Paint en java
    Par soad dans le forum 2D
    Réponses: 2
    Dernier message: 14/04/2006, 14h47

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