+ All Categories
Home > Documents > Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de...

Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de...

Date post: 27-Dec-2019
Category:
Upload: others
View: 17 times
Download: 1 times
Share this document with a friend
23
Tehnici avansate de programare Curs - Cristian Fr ˘ asinaru [email protected] Facultatea de Informatic ˘ a Universitatea ”Al. I. Cuza” Ias ¸i
Transcript
Page 1: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Tehnici avansate de programareCurs -

Cristian Frasinaru

[email protected]

Facultatea de Informatica

Universitatea ”Al. I. Cuza” Iasi

Page 2: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Desenarea (Java 2D)

Tehnici avansate de programare – p.1/22

Page 3: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Cuprins

Conceptul de desenare

Metoda paint

Desenarea componentelor

Context grafic de desenare

Primitive grafice de desenare

Fonturi

Culori

Imagini

Tiparirea

Tehnici avansate de programare – p.2/22

Page 4: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Grafica pe calculator

"Grafica pe calculator = Reprezentarea si gestionarea decontinut vizual

Platforma Java ofera:

API de tip "infrastructura" care permite lucrul cu:imagini, culori, fonturi, dimensiuni, etc.

Grafica 2D → Java2D API

Grafica 3D → Java3D API

Grafica în modul full-screen

Tehnici avansate de programare – p.3/22

Page 5: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Conceptul "clasic" de desenare

Interfetele grafice sunt construite folosind componente.Desenarea acestora se face automat:

la afisarea pentru prima data;

la operatii de minimizare, maximizare,redimensionare a suprafetei de afisare;

ca raspuns al unei solicitari explicite a programului.

Metodele de baza sunt în superclasa Component:

void paint(Graphics g)

void update(Graphics g)

void repaint()

Tehnici avansate de programare – p.4/22

Page 6: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Metoda paint

Metoda paint din clasa Component ofera reprezentareagrafica a unei componente (descrie desenul acesteia).

public class MyFrame extends Frame {public MyFrame(String title) {

super(title);setSize(200, 100);

}

public void paint(Graphics g) {super.paint(g); // Apelam metoda paint a clasei Frameg.setFont(new Font("Arial", Font.BOLD, 11));g.setColor(Color.red);g.drawString("Aplicatie DEMO", 5, 35);

}}

Tehnici avansate de programare – p.5/22

Page 7: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Metoda paintComponent

In Swing, componentele sunt obiecte de tip Container,deci pot avea fii. Metoda paintComponent descriedesenul componentei propriu-zise.

Metoda paint va face urmatoarele invocari:

paintComponent

paintBorder

paintChildern

Tehnici avansate de programare – p.6/22

Page 8: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Crearea unei componente proprii

Extindem o clasa suport care nu are reprezentarevizuala: java.awt.Canvas, javax.swing.Panel, etc.

Definim metoda paint sau paintComponent

Stabilim dimensiunile preferata, minima, maxima

class MyComponent extends JPanel {

public void paintComponent(Graphics g) { ... }

// Metodele folosite de gestionarii de pozitionarepublic Dimension getPreferredSize() { return ... };public Dimension getMinimumSize() { return ... }public Dimension getMaximumSize() { return ... }

}

Tehnici avansate de programare – p.7/22

Page 9: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Contextul grafic de desenare

Un context grafic este un obiect de tip Graphics sauGraphics2D folosit pentru desenare într-un spatiu decoordonate virtual, numit spatiul utilizator. Spatiulutilizator este apoi mapat la un spatiu concret, specificunui dispozitiv :

ecran, imprimanta, memorie, etc.

Un context grafic de desenare ofera:

primitive grafice : desenarea de figuri geometrice,texte, imagini, etc.

modalitati de configurare a propriet atilorculoare, font, originea coordonatelor, suprafata vizibila, modul de desenare, etc.

Tehnici avansate de programare – p.8/22

Page 10: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Propriet atile contextului grafic

Culoarea de desenare ColorPaint

Fontul de scriere a textelor FontGrosimea penitei StrokePreferinte de desenare RenderingHintsZona de decupare ClipModul de desenare XorModeModul de compunere CompositeModul de transformare Transform... ...

Tehnici avansate de programare – p.9/22

Page 11: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Primitive grafice

Text drawString

Imagine drawImage

Linie drawLine

drawPolyline

drawRect, fillRectDreptunghi draw3DRect, fill3DRect

drawRoundRect, fillRoundRect

Poligon drawPolygon, fillPolygon

Oval (Elipsa) drawOval, fillOval

Arc de cerc drawArc, fillArc

... ...

Form a geometric a draw(Shape), fill(Shape)

Operatii clip, rotate, translate,scale, shear

Tehnici avansate de programare – p.10/22

Page 12: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Folosirea fonturilor

Font = colectie de simboluri (glyphs).

Fonturi înrudite formeaza o familie : Helvetica, Arial, etc.

Numele fontului identifica exact un font recunoscutde sistem: Helvetica Bold, Arial Bold Italic, etc.

Fonturile pot fi:fizice : unul din fonturile instalate în SOlogice : abstracte, specifice platformei Java - suntmapate corespunzator cu fonturi fizice la runtime.(Dialog, DialogInput, Monospaced, Serif, SansSerif)

Un font are parametri: înaltime si stil

Dimensiunile caracterelor: metrica fontului .

Tehnici avansate de programare – p.11/22

Page 13: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

ClasaFont

Clasa Font încapsuleaza toate informatiile fontului, maiputin metrica sa.Font(String name, int style, int size)

new Font("Dialog", Font.PLAIN, 12);new Font("Arial", Font.ITALIC, 14);new Font("Courier", Font.BOLD, 10);

// Pentru componenteLabel label = new Label("Un text");label.setFont(new Font("Dialog", Font.PLAIN, 12));

// In metoda paint(Graphics g)g.setFont(new Font("Courier", Font.BOLD, 10));g.drawString("Alt text", 10, 20);

Tehnici avansate de programare – p.12/22

Page 14: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

ClasaFontMetrics

public void paint(Graphics g) {Font f = new Font("Arial", Font.BOLD, 11);FontMetrics fm = g.getFontMetrics();

int height = fm.getHeight();int helloWidth = fm.stringWidth("Hello");int xWidth = fm.charWidth(’x’);

}

Tehnici avansate de programare – p.13/22

Page 15: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Folosirea culorilor

Interfata Paint

Color : Red Green Blue Alpha (0− 255, 0.0− 1.0)Color rosu = Color.red;Color negru = new Color(0, 0, 0);Color rosuTransparent = new Color(255, 0, 0, 128);

SystemColor : SystemColor.desktop

GradientColorGradientPaint(Point2D p1, Color c1, Point2D p2, Color c2)

TexturePaintTexturePaint(BufferedImage txtr, Rectangle2D anchor)

Tehnici avansate de programare – p.14/22

Page 16: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Folosirea imaginilor

java.awt.Image (abstracta)

java.awt.BufferedImage

Formate: GIF, PNG, JPEG, etc.

Incarcarea unei imagini:BufferedImage image = ImageIO.read(new File("hello.jpg"))

Crearea unei imagini:BufferedImage bi = new BufferedImage(w, h, type);

Graphics g = bi.getGraphics();

Desenarea unei imagini: graphics.drawImage

Salvarea unei imagini într-un fisier: ImageIO.write

Tehnici avansate de programare – p.15/22

Page 17: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Desenarea unei imagini

BufferedImage img = ImageIO.read(new URL("http://www.remoteServer.com/hugeImage.jpg"));

public void paint(Graphics g) {g.drawImage(img, 0, 0, this);g.drawImage(img, 0, 200, 100, 100, this);

}

//Formatul cel mai general al metodei drawImageboolean drawImage(Image img,

int x, int y,int width, int height,Color bgcolor,ImageObserver observer)

Tehnici avansate de programare – p.16/22

Page 18: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Monitorizarea încarcarii imaginilor

Interfata ImageObserverboolean imageUpdate (Image img, int flags,

int x, int y, int w, int h )

flags:ABORT, ALLBITS, ERROR, HEIGHT, WIDTH, PROPERTIES

public boolean imageUpdate(Image img, int flags,int x, int y, int w, int h) {

// Desenam doar daca toti bitii sunt disponibiliif (( flags & ALLBITS) != 0) {

repaint();}

// Daca sunt toti bitii nu mai sunt necesare noi update-urireturn ( (flags & (ALLBITS | ABORT)) == 0);

}

Tehnici avansate de programare – p.17/22

Page 19: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Mecanismul de "double-buffering"

Eliminarea efectului de "flickering".// Supradefinim update pentru a elimina stergerea desenuluipublic void update(Graphics g) {

paint(g);}public void paint(Graphics g) {

// Desenam in memorie intr-un obiect de tip BufferedImageBufferedImage offImage =

new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB);Graphics2D g2 = offImage.getGraphics();// Realizam desenul folosind g2g2.setColor(...); g2.fillOval(...); ...

// Transferam desenul din memorie pe ecran,// desenand de fapt imaginea creatag.drawImage(offImage, 0, 0, this);g2.dispose();

}}

Tehnici avansate de programare – p.18/22

Page 20: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Tiparirea

java.awt.print

1. Crearea unei sesiuni de tiparire:PrinterJob.getPrinterJob

2. Specificarea obiectului care va fi tiparit: setPrintable

Acesta trebuie sa implementeze interfata Printable

3. Optional, initierea unui dialog cu utilizatorul pentruprecizarea unor parametri legati de tiparire:printDialog;

4. Tiparirea efectiva: print.

Tehnici avansate de programare – p.19/22

Page 21: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Interfata Printable

public int print(Graphics g, PageFormat pf, int pageIndex)throws PrinterException {

if (ceva nu este in regula) {return Printable.NO_SUCH_PAGE;

}

// Descrierea grafica a componentei in vederea tipaririipaint(g); // poate fi, dar nu neaparatg.drawString("Numai la imprimanta", 200, 300);

return Printable.PAGE_EXISTS;}

Tehnici avansate de programare – p.20/22

Page 22: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Java 3D

Independent de platforma

Interfata peste OpenGL sau DirectX

Graful scenei - arbore de obiecte 3D

Vizualizare dinamica

Umbre

Sunet "spatial"

Suport pentru formate ca VRML

..

Nu este inclus kit-ul standard (JDK) (instalare separata)

Tehnici avansate de programare – p.21/22

Page 23: Tehnici avansate de programareacf/java/slides/ro/desenare_slide.pdf · Contextul grafic de desenare Un context grafic este un obiect de tip Graphics sau Graphics2D folosit pentru

Java Tutorial

Trail: 2D Graphicshttp://docs.oracle.com/javase/tutorial/2d/index.html

Lesson: Full-Screen Exclusive Mode APIhttp://docs.oracle.com/javase/tutorial/extra/fullscreen/index.html

Trail: Soundhttp://docs.oracle.com/javase/tutorial/sound/index.html

Tehnici avansate de programare – p.22/22


Recommended