Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle
Copyright © 2001 Laurent Deruelle2 L API JAVA2D API JAVA2D –capacités graphiques avancées en deux dimensions –graphismes, images, et textes 2D –extension java.awt et remplacement des classes de base
Copyright © 2001 Laurent Deruelle3 L API JAVA2D Caractéristiques Java2D : –structure de remplissage (dégradés, motifs) –personnaliser la largeur et le style d un trait –anticrénelage pour lisser les bords d objets dessinés g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
Copyright © 2001 Laurent Deruelle4 Espace de Coordonnées Zone en 2D pouvant être décrite à l aide de coordonnées x, y. (0,0) est le coin supérieur gauche de la surface coordonnées utilisateur coordonnées périphériques (fenêtre, imprimante, etc) => translation, rotation, etc. conversions automatiques durant le rendu
Copyright © 2001 Laurent Deruelle5 La Classe Graphics2D La classe java.awt.Graphics2D étend la classe java.awt.Graphics. Pour utiliser Java2D, il faut transformer l objet Graphics en un objet Graphics2D : public void paintComponent (Graphics g) { Graphics2D g2D = (Graphics2D) g;... }
Copyright © 2001 Laurent Deruelle6 Le Rendu Spécifier comment un objet sera dessiné dans la surface d affichage attributs pour le rendu : –couleur –largeur de ligne –motifs de remplissage –transparence –etc.
Copyright © 2001 Laurent Deruelle7 Exemple de Rendus Le style Trait : setStroke() Le style Remplissage : setPaint() Le style Composition : setComposite()
Copyright © 2001 Laurent Deruelle8 Exemple de Rendus Le style Transformation : setTransform() Le style Clip : setClip() le style Anticrénelage : setRenderingHints()
Copyright © 2001 Laurent Deruelle9 Les couleurs 2D On spécifie les couleurs à l aide de la méthode setColor(Color c) Exemple: g2D.setColor(Color.black);
Copyright © 2001 Laurent Deruelle10 Motifs de Remplissage Les motifs contrôlent la manière dont un objet dessiné est rempli. –couleur unie –dégradé –texture –motif personnalisé
Copyright © 2001 Laurent Deruelle11 Motifs de Remplissage Le motif se définit avec la méthode setPaint(Paint paint); L interface Paint peut être implémentée pour définir un motif de remplissage Exemple: –GradientPaint –TexturePaint –Color :couleur unie
Copyright © 2001 Laurent Deruelle12 La classe GradientPaint Le gradient permet de définir un dégradé de couleur: –acyclique (linéaire) –cyclique (à répétition: indiquer true au constructeur de GradientPaint) Exemple : GradientPaint(x1, y1, Color.black, x2, y2, Color.white, true);
Copyright © 2001 Laurent Deruelle13 La classe GradientPaint
Copyright © 2001 Laurent Deruelle14 La classe TexturePaint Elle permet de remplir une forme à l aide d une image, spécifié en tant que BufferedImage. Exemple : TexturePaint(image, rectangle) –rectangle est utilisé pour spécifier la taille de l image et sa fréquence de répétition
Copyright © 2001 Laurent Deruelle15 La classe TexturePaint
Copyright © 2001 Laurent Deruelle16 Le type Trait En awt classique, toutes les lignes mesurent 1 pixel de large. En Java2D, la largeur varie en utilisant la méthode setStroke(Stroke s). L interface Stroke est implémentée uniquement par BasicStroke.
Copyright © 2001 Laurent Deruelle17 La classe BasicStroke Il décrit le rendu d une forme faite au crayon. BasicStroke(float largeur, int ornement, int jonction)
Copyright © 2001 Laurent Deruelle18 L Ornement ornement est –BasicStroke.CAP_BUTT : carré –BasicStroke.CAP_ROUND : arrondi –BasicStroke.CAP_SQUARE : carré plus long
Copyright © 2001 Laurent Deruelle19 La Jonction La jonction est : –BasicStroke.JOIN_MITER : joint les segments en étendant leurs bords externes –BasicStroke.JOIN_ROUND : arrondi l angle formé entre deux ségments –BasicStroke.JOIN_BEVEL : joint les ségments par une ligne droite
Copyright © 2001 Laurent Deruelle20 Le Clipping Le clipping consiste à définir une zone d affichage. Toutes formes hors de cette zone ne sera pas affiché. Exemple : Ellipse2D ellipse = new Ellipse2D.Float(); Rectangle2D rect = new Rectangle2D.Float();... ellipse.setFrame(x, y, ew, eh); g2.setClip(ellipse); //définit la zone de clipping rect.setRect(x+5, y+5, ew-10, eh-10); g2.clip(rect); //la zone finale est l intersection de l ellipse et du rectangle
Copyright © 2001 Laurent Deruelle21 Le Clipping
Copyright © 2001 Laurent Deruelle22 Le Compositing Le compositing permet de mélanger les couleurs de plusieurs formes Il permet de gérer la transparence en spécifiant une valeur alpha. La valeur alpha spécifie le degré de transparence –1.0 totalement opaque –0.0 totalement transparent
Copyright © 2001 Laurent Deruelle23 Le Compositing ac = AlphaComposite.getInstance(getRule(rule), alpha); public int getRule(int rule){ int alphaComp = 0; switch ( rule ) { case 0: alphaComp = AlphaComposite.SRC; break; case 1: alphaComp = AlphaComposite.DST_IN; break; case 2: alphaComp = AlphaComposite.DST_OUT; break; case 3: alphaComp = AlphaComposite.DST_OVER; break; case 4: alphaComp = AlphaComposite.SRC_IN; break; case 5: alphaComp = AlphaComposite.SRC_OVER; break; case 6: alphaComp = AlphaComposite.SRC_OUT; break; case 7: alphaComp = AlphaComposite.CLEAR; break; } return alphaComp; }
Copyright © 2001 Laurent Deruelle24 Le Compositing public void paintComponent(Graphics g) { super.paintComponent( g ); Graphics2D g2 = (Graphics2D) g; BufferedImage buffImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); Graphics2D gbi = buffImg.createGraphics(); // effacer a surface. g2.setColor(Color.white); g2.fillRect(0, 0, d.width, d.height); int rectx = w/4; int recty = h/4;
Copyright © 2001 Laurent Deruelle25 Le Compositing // Draws the rectangle and ellipse into the buffered image. gbi.setColor(new Color(0.0f, 0.0f, 1.0f, 1.0f)); gbi.fill(new Rectangle2D.Double(rectx, recty, 150, 100)); gbi.setColor(new Color(1.0f, 0.0f, 0.0f, 1.0f)); gbi.setComposite(ac); gbi.fill(new Ellipse2D.Double(rectx+rectx/2,recty+recty/2,150,100)); // Draws the buffered image. g2.drawImage(buffImg, null, 0, 0); }
Copyright © 2001 Laurent Deruelle26 Le Compositing
Copyright © 2001 Laurent Deruelle27 Les Formes Java2D Lorsque les attributs et le style de rendu de l objet Graphics2D sont réalisés : –créer l objet –dessiner l objet
Copyright © 2001 Laurent Deruelle28 Les Formes Java2D les objets sont des formes géométriques (java.awt.geom) : –Line2D –Rectangle2D –Ellipse2D –Arc2D –GeneralPath (polygone)
Copyright © 2001 Laurent Deruelle29 Les Lignes 2D Les lignes sont créées à l aide de la classe Line2D.Float Exemple : Line2D.Float ligne = new Line2D.Float(60f, 5f, 13f, 28f);
Copyright © 2001 Laurent Deruelle30 Les Rectangles 2D Les rectangles sont créés à l aide des classes Rectangle2D.Float ou RoundRectangle2D.Double Les paramètres du constructeur sont le point (x,y) de départ, puis la largeur et la hauteur. Exemple: Rectangle2D.Float(10f, 13f, 40f, 20f) RoundRectangle2D.Float(10f, 13f, 40f, 20f, largeurarc, hauteurarc)
Copyright © 2001 Laurent Deruelle31 Les Ellipses 2D Les objets ovales sont appelés ellipses en Java2D. Ils sont créés à l aide de la classe Ellipse2D.Float les paramètres sont le point de départ, puis la largeur et la hauteur Exemple : –Ellipse2D.Float(113, 25, 22, 40)
Copyright © 2001 Laurent Deruelle32 Les Arcs 2D Les arcs de cercle en Java2D sont créés à l aide de la classe Arc2D.Float les quatre premiers paramètres indiquent les coordonées x,y, largeur et hauteur. Les trois derniers sont le degré de départ de l arc, le nombre de degré qu il parcourt, et un entier décrivant comment il se ferme (Arc2D.OPEN: non fermé, Arc2D.CHORD: ligne droite, Arc2D.PIE: vers le centre)
Copyright © 2001 Laurent Deruelle33 Les Polygones Les polygones sont créés en définissant chaque mouvement d un point à un autre. Les polygones sont définis à l aide d un objet GeneralPath. La méthode moveTo(x, y), permet de créer le premier point du polygone.
Copyright © 2001 Laurent Deruelle34 Les Polygones Les méthodes lineTo(x, y) permet de relier le point courant à un autre. La méthode closePath() permet de fermer le polygone. Exemple : –GeneralPath poly = new GeneralPath(); –poly.moveTo(10f, 10f); poly.lineTo(55f, 55f); –poly.closePath();
Copyright © 2001 Laurent Deruelle35 Le texte en 2D Le texte est dessiné à l aide la méthode drawString(chaine, x, y) Exemple : –g2D.drawString(Bonjour, 10f, 20f);
Copyright © 2001 Laurent Deruelle36 Les Images Java2D implémente un nouveau modèle pour la manipulation d images. Exemple : Image image = Toolkit.getDefaultToolkit().getImage(img.gif); g2.drawImage(image, x, y, largeur, hauteur, this); Supposer un - Jpanel -JFrame
Copyright © 2001 Laurent Deruelle37 Les Images int iw = image.getWidth(this); int ih = image.getHeight(this); bi = new BufferedImage(iw, ih, BufferedImage.TYPE_INT_RGB); Graphics2D big = bi[i].createGraphics(); big.drawImage(image,0,0,this);
Copyright © 2001 Laurent Deruelle38 Dessiner les objets Tous les objets dessinés utilisent les mêmes méthodes de la classe Graphics2D : –draw(Shape s) pour les contours, –fill(Shape s) pour les objets remplis, –drawImage(BufferedImage) Définir les couleurs –setBackground(Color.black); –setForeground(Color.white);
Copyright © 2001 Laurent Deruelle39 Les Transformations Graphics2D L objet Graphics2D peut appliquer des opérations sur la surface d affichage : –scale(x, y) pour mettre à l echelle (<1) –rotate (theta) effectue une rotation –rotate (theta, x, y) effectue une rotation et une translation –translate (double x, double y) effectue une translation –translate (int x, int y) modifie l origine de la surface