39
Copyright © 2001 Laurent Deruelle 1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle [email protected] littoral.fr

Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle [email protected]

Embed Size (px)

Citation preview

Page 1: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 1

LE GRAPHISME AVECJAVA 2D

Laurent Deruelle

[email protected]

Page 2: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 2

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

Page 3: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 3

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);

Page 4: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 4

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

Page 5: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 5

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; ...

}

Page 6: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 6

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.

Page 7: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 7

Exemple de Rendus

• Le style Trait :

setStroke()

• Le style Remplissage :

setPaint()

• Le style Composition :

setComposite()

Page 8: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 8

Exemple de Rendus

• Le style Transformation :

setTransform()

• Le style Clip :

setClip()

• le style Anticrénelage :

setRenderingHints()

Page 9: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 9

Les couleurs 2D

• On spécifie les couleurs à l ’aide de la méthode setColor(Color c)

• Exemple:

g2D.setColor(Color.black);

Page 10: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 10

Motifs de Remplissage

• Les motifs contrôlent la manière dont un objet dessiné est rempli.– couleur unie– dégradé– texture– motif personnalisé

Page 11: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 11

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

Page 12: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 12

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);

Page 13: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 13

La classe GradientPaint

Page 14: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 14

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

Page 15: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 15

La classe TexturePaint

Page 16: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 16

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.

Page 17: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 17

La classe BasicStroke

• Il décrit le rendu d ’une forme faite au crayon.

• BasicStroke(float largeur, int ornement, int jonction)

Page 18: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 18

L ’Ornement

• ornement est– BasicStroke.CAP_BUTT : carré– BasicStroke.CAP_ROUND : arrondi– BasicStroke.CAP_SQUARE : carré plus long

Page 19: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 19

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

Page 20: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 20

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

Page 21: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 21

Le Clipping

Page 22: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 22

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

Page 23: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 23

Le Compositingac = 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;

}

Page 24: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 24

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;

Page 25: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 25

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);

}

Page 26: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 26

Le Compositing

Page 27: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 27

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

Page 28: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 28

Les Formes Java2D

• les objets sont des formes géométriques (java.awt.geom) :– Line2D– Rectangle2D– Ellipse2D– Arc2D– GeneralPath (polygone)

Page 29: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 29

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);

Page 30: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 30

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)

Page 31: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 31

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)

Page 32: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 32

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)

Page 33: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 33

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.

Page 34: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 34

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();

Page 35: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 35

Le texte en 2D

• Le texte est dessiné à l ’aide la méthode drawString(chaine, x, y)

• Exemple :– g2D.drawString(’’Bonjour ’’, 10f, 20f);

Page 36: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 36

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

Page 37: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 37

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);

Page 38: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 38

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);

Page 39: Copyright © 2001 Laurent Deruelle1 LE GRAPHISME AVEC JAVA 2D Laurent Deruelle deruelle@lil.univ-littoral.fr

Copyright © 2001 Laurent Deruelle 39

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