8. Java 2D a kreslení       Ondřej Brejla
Obsah   Grafický kontext   Volba barvy   Volba písma   Fontové metriky   Kreslení primitivních objektů   Kreslení ob...
Co je to ”grafický kontext”?
Co je to ”grafický kontext”?
Co je to ”grafický kontext”?Krysa je v grafickém kontextu          dělící čáry.
Grafický kontext   Co to znamená ”grafický kontext”?       Je to datová struktura       ”Abstraktní kreslítko” - jak a ...
Jak mohu zvolit barvu?
Jak mohu zvolit barvu?
Jak mohu zvolit barvu?  Namočíme štětec do kalíšku...            ...nebo...
Jak mohu zvolit barvu?            ...nebo...        ...použijeme třídu       java.awt.Color
Jak mohu zvolit barvu?                   Color.ORANGEColor.GREEN                                  Color.BLUE              ...
Volba barvy   Před kreslením je barvu třeba nastavit       g.setColor(Color color); // getColor();   Použijeme objekt j...
Jaké písmo vybrat?
Jaké písmo vybrat?             Aš nazg           durbatulűk...
Jaké písmo vybrat?     Tak jednoduché to nebude...
Volba písma   Před použitím je potřeba písmo nastavit    g.setFont(Font font); // g.getFont();   Písmo je reprezentováno...
Jaké jsou fontové metriky?
Jaké jsou fontové metriky?
Jaké jsou fontové metriky?   Je jich spousty...vypadá to            zmateně...
Jaké jsou fontové metriky?  ...nás, naštěstí, zajímá pouze              jedna...
Jaké jsou fontové metriky?   ...a to tato jednoduchá...uff.
Fontové metriky   Fontové metriky získáme z objektu třídy    java.awt.FontMetrics       public int getAscent() - výška z...
Fontové metriky   A objekt FontMetrics získáme z grafického    kontextu       g.getFontMetrics() - metrika aktuálního fo...
Jak kreslit primitivní objekty?
Jak kreslit primitivní objekty?
Jak kreslit primitivní objekty?  Třeba jako Picasso (Guernica)...             ...nebo...
Jak kreslit primitivní objekty?              ...nebo...      ...použijeme metody třídy        java.awt.Graphics
Kreslení primitivních objektů    g.drawLine(int x1, int y1, int x2, int y2) –    vykreslí čáru mezi body   g.drawRect(in...
Kreslení primitivních objektů   g.draw3DRect(int x, int y, int width, int     height, boolean b) – vykreslí obrys 3D obdé...
Kreslení primitivních objektů   Oblouk je určen počátečním úhlem a velikostí vnitřního    úhlu ve stupních       počáteč...
Jak kreslit obrázky?
Jak kreslit obrázky?
Jak kreslit obrázky?  Ručně kreslit radši nebudeme...
Jak kreslit obrázky?     ...radši obrázek načteme         a necháme vykreslit
Kreslení obrázků   Rozhraní Icon       Obrázek pevné velikosti používaný pro dekorace       Nelze provádět úpravy obráz...
Kreslení obrázků   ImageIcon       Ikona na základě obrázku       Lze použít Image tam, kde je vyžadováno Icon       K...
Kreslení obrázků   Načtení obrázku       Image je abstraktní, takže musíme jinak       Pomocí třídy Toolkit       Tool...
Graphics vs. Graphics2D?
Graphics vs. Graphics2D?
Graphics vs. Graphics2D?        Stáří vs. Mládí...
Graphics vs. Graphics2D?   Třída Graphics2D       Kvůli zpětné kompatibilitě potomkem třídy        Graphics       Kvůli...
Rozhraní - Shape   Reprezentuje nějaký tvar       Rectangle2D, Ellipse2D, Arc2D       Line2D, CubicCurve2D, QuadCurve2D...
Rozhraní - Paint   Určuje jakou barvou se bude jaký pixel kreslit   Nastavuje se pomocí metody    g2d.setPaint(Paint p);...
Rozhraní - Stroke   Určuje jakým způsobem se budou kreslit čáry a obrysy   Nastavuje se pomocí metody    g2d.setStroke(S...
Rozhraní - Composite   Určuje způsob zkombinování původní a nové barvy    pixelu při kreslení   Nastavuje se pomocí meto...
Jak transformovat?
Jak transformovat?
Jak transformovat?     Kreslených transformerů        se ptát nebudeme...
Jak transformovat?      ...jednoduše použijeme        AffineTransform
Transformace   Je možné provést afinní transformaci systému    souřadnic (transformace je reprezentována    maticí)   Tř...
Polygony?
Polygony?
Polygony?    Kdepak závodní polygon...        ...kreslit budeme!
Polygony a obecné křivky   Mnohoúhelníky       Uzavřené tvary složené z úseku rovných čar       Lze je vykreslit pomocí...
Polygony a obecné křivky   Lomené čáry       Posloupnosti bodů spojené rovnými čarami       Uzavřené lomené čáry jsou p...
A to je pro dnešek vše. Otázky?       Děkuji za pozornost!
Upcoming SlideShare
Loading in …5
×

Java 2D a kreslení

5,743 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
5,743
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java 2D a kreslení

  1. 1. 8. Java 2D a kreslení Ondřej Brejla
  2. 2. Obsah Grafický kontext Volba barvy Volba písma Fontové metriky Kreslení primitivních objektů Kreslení obrázků Rozhraní – Shape, Paint, Stroke, Composite Transformace Kreslení polygonů a obecných křivek
  3. 3. Co je to ”grafický kontext”?
  4. 4. Co je to ”grafický kontext”?
  5. 5. Co je to ”grafický kontext”?Krysa je v grafickém kontextu dělící čáry.
  6. 6. Grafický kontext Co to znamená ”grafický kontext”?  Je to datová struktura  ”Abstraktní kreslítko” - jak a kam VS. co  Je to objekt třídy Graphics (resp. Graphics2D)  Definuje metody pro kreslení a výstup textu  Pro kreslení do komponent většinou překrýváme metodu: public void paintComponent(Graphics g)
  7. 7. Jak mohu zvolit barvu?
  8. 8. Jak mohu zvolit barvu?
  9. 9. Jak mohu zvolit barvu? Namočíme štětec do kalíšku... ...nebo...
  10. 10. Jak mohu zvolit barvu? ...nebo... ...použijeme třídu java.awt.Color
  11. 11. Jak mohu zvolit barvu? Color.ORANGEColor.GREEN Color.BLUE Color.YELLOWColor.RED Color.WHITE
  12. 12. Volba barvy Před kreslením je barvu třeba nastavit  g.setColor(Color color); // getColor(); Použijeme objekt java.awt.Color  Buď předdefinovanou konstantu (např. Color.RED)  Nebo vlastní instanci new Color(int red, int green, int blue);  red, green, blue - <0; 255>
  13. 13. Jaké písmo vybrat?
  14. 14. Jaké písmo vybrat? Aš nazg durbatulűk...
  15. 15. Jaké písmo vybrat? Tak jednoduché to nebude...
  16. 16. Volba písma Před použitím je potřeba písmo nastavit g.setFont(Font font); // g.getFont(); Písmo je reprezentováno objektem třídy java.awt.Font  Konstruktor má 3 parametry – name, style, size  name – logické (Serif, Monospaced, SansSerif, Dialog a DialogInput), nebo ”fyzické”  style – Font.PLAIN | BOLD | ITALIC  size – velikost v bodech – 1 bod = 1/72” Objekt písma nelze později upravovat
  17. 17. Jaké jsou fontové metriky?
  18. 18. Jaké jsou fontové metriky?
  19. 19. Jaké jsou fontové metriky? Je jich spousty...vypadá to zmateně...
  20. 20. Jaké jsou fontové metriky? ...nás, naštěstí, zajímá pouze jedna...
  21. 21. Jaké jsou fontové metriky? ...a to tato jednoduchá...uff.
  22. 22. Fontové metriky Fontové metriky získáme z objektu třídy java.awt.FontMetrics  public int getAscent() - výška znaku nad účařím v pixelech  public int getDescent() - výška znaku pod účařím v pixelech  public int getLeading() - velikost mezery mezi řádky v pixelech  public int getHeight() - velikost písma v pixelech
  23. 23. Fontové metriky A objekt FontMetrics získáme z grafického kontextu  g.getFontMetrics() - metrika aktuálního fontu  g.getFontMetrics(Font font) – metrika zadaného fontu
  24. 24. Jak kreslit primitivní objekty?
  25. 25. Jak kreslit primitivní objekty?
  26. 26. Jak kreslit primitivní objekty? Třeba jako Picasso (Guernica)... ...nebo...
  27. 27. Jak kreslit primitivní objekty? ...nebo... ...použijeme metody třídy java.awt.Graphics
  28. 28. Kreslení primitivních objektů g.drawLine(int x1, int y1, int x2, int y2) – vykreslí čáru mezi body g.drawRect(int x, int y, int width, int  height) – vykreslí obrys obdélníka (od souřadnic levého horního rohu) g.fillRect(int x, int y, int width, int  height) – vyplní obdélník (-||-) g.drawRoundRect(int x, int y, int width,  int height, int arcWidth, int arcHeight) - vykreslí obrys obdélníka se zaoblenými rohy (-||-) g.fillRoundRect(int x, int y, int width,  int height, int arcWidth, int arcHeight) – vyplní obdélník se zaoblenými rohy (-||-)
  29. 29. Kreslení primitivních objektů g.draw3DRect(int x, int y, int width, int  height, boolean b) – vykreslí obrys 3D obdélníka, b  == true => vystouplý, b == false => zapuštěný ( -||- ) g.fill3DRect(int x, int y, int width, int  height, boolean b) – vyplní 3D obdélník (parametry stejné jako u draw) g.drawOval(int x, int y, int width, int  height) – vykreslí obrys elipsy, parametry popisují obalový obdélník (elipsa se všech stran dotýká) g.fillOval(int x, int y, int width, int  height) – vyplní elipsu (parametry stejné jako u draw)
  30. 30. Kreslení primitivních objektů Oblouk je určen počátečním úhlem a velikostí vnitřního úhlu ve stupních  počáteční úhel je na ”3 hodinách”  Proti směru hodinových ručiček je úhel kladný g.drawArc(int x, int y, int width, int  height, int startAngle, int arcAngle) – vykreslí obrys oblouku relativně k zadané elipse g.fillArc(int x, int y, int width, int  height, int startAngle, int arcAngle) – vyplní oblouk relativně k zadané elipse g.drawString(String s, int x, int y) – vykreslí řetězec (souřadnice účaří nejlevějšího znaku)
  31. 31. Jak kreslit obrázky?
  32. 32. Jak kreslit obrázky?
  33. 33. Jak kreslit obrázky? Ručně kreslit radši nebudeme...
  34. 34. Jak kreslit obrázky? ...radši obrázek načteme a necháme vykreslit
  35. 35. Kreslení obrázků Rozhraní Icon  Obrázek pevné velikosti používaný pro dekorace  Nelze provádět úpravy obrázku  Lze vykreslit na komponentu metodou g.paintIcon() Abstraktní třída Image reprezentuje obrázek  VolatileImage – data nejsou přímo dostupná z Javy  BufferedImage – obsahuje pole pixelů dostupných z Javy, lze do něj kreslit
  36. 36. Kreslení obrázků ImageIcon  Ikona na základě obrázku  Lze použít Image tam, kde je vyžadováno Icon  Konstruktor bere název souboru – URL (gif, png, jpg)
  37. 37. Kreslení obrázků Načtení obrázku  Image je abstraktní, takže musíme jinak  Pomocí třídy Toolkit  Toolkit.getDefaultToolkit().createImage(file); Kreslení obrázků  g.drawImage() - image, levý horní roh a velikost  Kreslení obrázku je asynchronní  Pokud nejsou k dispozici kompletní data, informuje komponentu přes rozhranní ImageObserver, jakmile se další data objeví  Metoda umí vykreslit i výřez
  38. 38. Graphics vs. Graphics2D?
  39. 39. Graphics vs. Graphics2D?
  40. 40. Graphics vs. Graphics2D? Stáří vs. Mládí...
  41. 41. Graphics vs. Graphics2D? Třída Graphics2D  Kvůli zpětné kompatibilitě potomkem třídy Graphics  Kvůli zpětné kompatibilitě se také stále předává grafický kontext Graphics a na Graphics2D je třeba přetypovat  Přidává nové vlastnosti
  42. 42. Rozhraní - Shape Reprezentuje nějaký tvar  Rectangle2D, Ellipse2D, Arc2D  Line2D, CubicCurve2D, QuadCurve2D  GeneralPath Vykreslení se děje pomocí metod g2d.draw(Shape s) a g2d.fill(Shape s) třídy Graphics2D
  43. 43. Rozhraní - Paint Určuje jakou barvou se bude jaký pixel kreslit Nastavuje se pomocí metody g2d.setPaint(Paint p); // g2d.getPaint()  Color  GradientPaint, LinearGradientPaint,  RadialGradientPaint  SystemColor – barva pro určitou část GUI  TexturePaint
  44. 44. Rozhraní - Stroke Určuje jakým způsobem se budou kreslit čáry a obrysy Nastavuje se pomocí metody g2d.setStroke(Stroke s);// g2d.getStroke()  BasicStroke – definuje tloušťku čáry, styl zakončení a zalomení čar a přerušení čar
  45. 45. Rozhraní - Composite Určuje způsob zkombinování původní a nové barvy pixelu při kreslení Nastavuje se pomocí metody g2d.setComposite(Composite s);  // g2d.getComposite()  AlphaComposite – původní barva se zkombinuje s kreslenou a umožňuje průhlednost
  46. 46. Jak transformovat?
  47. 47. Jak transformovat?
  48. 48. Jak transformovat? Kreslených transformerů se ptát nebudeme...
  49. 49. Jak transformovat? ...jednoduše použijeme AffineTransform
  50. 50. Transformace Je možné provést afinní transformaci systému souřadnic (transformace je reprezentována maticí) Třída AffineTransform obaluje matici  Transformaci provedeme postupně pomocí metod translate (posun počátku), rotate (rotace) a scale (změna měřítka) objektu třídy AffineTransform Nastavuje se pomocí metody g2d.setTransform(AffineTransform t);  // g2d.getTransform()
  51. 51. Polygony?
  52. 52. Polygony?
  53. 53. Polygony? Kdepak závodní polygon... ...kreslit budeme!
  54. 54. Polygony a obecné křivky Mnohoúhelníky  Uzavřené tvary složené z úseku rovných čar  Lze je vykreslit pomocí metod g.drawPolygon(int[] xPoints, int[] yPoints,  int point) a g.fillPolygon(int[] xPoints, int[] yPoints,  int point) třídy Graphics  Polygon může být reprezentován třídou Polygon, která obsahuje metodu addPoint() pro přidání bodu
  55. 55. Polygony a obecné křivky Lomené čáry  Posloupnosti bodů spojené rovnými čarami  Uzavřené lomené čáry jsou polygony  Lze je vykreslit pomocí metody  g.drawPolyline(int[] xPoints, int[] yPoints,  int point)
  56. 56. A to je pro dnešek vše. Otázky? Děkuji za pozornost!

×