Základní grafika. Princip zobrazování obsahu. Grafický kontext. Zobrazovací metody. Přednáška 3

Podobné dokumenty
2 Grafický výstup s využitím knihovny

Java - Kresba. 2/28/11 1/8 Java - kresba

2 Tvorba interaktivních grafických programů

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Java aplety. Předávání parametrů z HTML

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

1. Nastavení dokumentu

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

Rastrový obraz Barevný prostor a paleta Zmenšení barevného prostoru Základní rastrové formáty

Multimediální systémy. 02 Reprezentace barev v počítači

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

GUI (Graphical User Interface)

UNIVERZITA PARDUBICE

Knihovna CanvasLib TXV první vydání prosinec 2014 změny vyhrazeny

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Fergusnova kubika, která je definována pomocí bodu P1, vektoru P1P2, bodu P3 a vektoru P3P4

1. Příklad uživatelského formuláře. Do formuláře je možné zadat celkem 4 různé typy údajů

13 Barvy a úpravy rastrového

. Grafika a plovoucí prostředí. Zpracování textů na počítači. Ing. Pavel Haluza, Ph.D. ústav informatiky PEF MENDELU v Brně haluza@mendelu.

Programování v jazyku C# II. 4.kapitola

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

Úvod do počítačové grafiky

aktivita, kdy sami chceme vykreslit nějaký grafický obrazec (úsečku, kružnici, atd.) nebo vypsat text

Rozšíření bakalářské práce

9. Práce s naskenovanými mapami

Práce na počítači. Bc. Veronika Tomsová

Rasterizace je proces při kterém se vektorově definovaná grafika konvertuje na. x 2 x 1

Úvod do programovacích jazyků (Java)

Barvy a barevné modely. Počítačová grafika

DATOVÉ FORMÁTY GRAFIKY, JEJICH SPECIFIKA A MOŽNOSTI VYUŽITÍ

Základy CSS (3. přednáška)

VYUŽITÍ POČÍTAČOVÉ GRAFIKY

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Kreslíme do webu. Canvas

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Dokument XHTML. Prohlížeč. styl CSS. Výstupní dokument. Soubor DTD

1.1. Spuštění ArchiCADu Práce s projektem Pracovní plocha 19

Programování v jazyku Java GUI, události

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

SPIRIT 15. Nové funkce. SOFTconsult spol. s r. o., Praha

Barvy v počítači a HTML.

Programování v C++ 1, 5. cvičení

VÝUKA PČ NA 2. STUPNI základy technického modelování. Kreslící a modelovací nástroje objekty, čáry

5 Algoritmy vyplňování 2D oblastí

BARVY. Příkaz barva. Barvy TrueColor. Se objeví dialogové okno

Grafické adaptéry a monitory

AutoCAD výstup výkresu

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do počítačové grafiky

Teorie barev. 1. Barvený model. 2. Gamut. 3. Barevný prostor. Barevný prostor různých zařízení

Teoretické minimum z PJV

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Kde se používá počítačová grafika

Programování v Javě I. Leden 2008

Postřehová hra. Zadání projektu. 1 Moje cíle

Seznámení s AWT: práce s okny, grafikou a textem

Počítačová grafika. OBSAH Grafické formy: Vektorová grafika Bitmapová (rastrová grafika) Barevné modely

Přehled základních html tagů

POČÍTAČOVÁ GRAFIKA. Lenka Bednaříková

Logo cz pl Grafické zásady

Programování v Javě I. Únor 2009

Barevné systémy Josef Pelikán CGG MFF UK Praha

Připravil: David Procházka. Vertex Buffer Objects

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

4 Tvorba a editace materiálů

Grafická data jsou u 2D vektorové grafiky uložena ve voxelech NEPRAVDA Grafická data jsou u rastrové grafiky uložena v pixelech PRAVDA Grafická data

Úvod do jazyka HTML (Hypertext Markup Language)

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 27 NÁSTROJE KRESLENÍ]

Pokyny pro žáky k testování písemné zkoušky na počítači

Popis ovládání aplikace - Mapový klient KÚPK

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Úvod do programovacích jazyků (Java)

8 Třídy, objekty, metody, předávání argumentů metod

Generické programování

Cvičení 6 PARAMETRICKÉ 3D MODELOVÁNÍ TVORBA VÝKRESU OBROBKU Inventor Professional 2012

Vývoj desktopových aplikací v Jazyce Java s bohatým grafickým uživatelským rozhraním.

Webové stránky. 6. Grafické formáty pro web. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

Algoritmy pro ořezávání 2D polygonů

Hydroprojekt CZ a.s. WINPLAN systém programů pro projektování vodohospodářských liniových staveb. HYDRONet 3. Modul SITUACE

Základní ovládání a práce s programem CorelDraw 11

MALUJEME v MALOVÁNÍ. Základní nabídka. a) tažením úchytů umístěných v pravém dolním rohu a na spodním okraji obrázku

Úpravy rastrového obrazu

Základy informatiky. 10 Počítačová grafika

Předpoklady Instalace programu Obnovení výchozích předvoleb Další zdroje informací

OBSAH ADOBE ILLUSTRATOR CS6 OFICIÁLNÍ VÝUKOVÝ KURZ

Popis základního prostředí programu AutoCAD

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

COREL PHOTO-PAINT SEZNÁMENÍ S PROGRAMEM. Lenka Bednaříková

Výhody programu OCAD

SkiJo podpora pro vytyčování, řez terénem a kreslení situací

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

B_PPG PRINCIPY POČÍTAČOVÉ GRAFIKY

DUM 01 téma: Úvod do počítačové grafiky

Transkript:

Přednáška 3 Princip zobrazování obsahu Základní grafika Překreslení (vykreslení) obsahu komponenty se realizuje při příchodu zprávy paint Standardně se o zobrazení stará samostatné vlákno Principiálně nelze určit přesný okamžik vykreslení Rodičovská komponenta zabezpečí překreslení dceřiných komponent (tj. těch, které jsou vloženy do jejího kontejneru) Každá komponenta je zodpovědná za svůj obsah Důležité je pořadí komponent (z-order) OK Cancel OK OK Cancel Cancel 1 Přednáška 3 2 Zobrazovací metody Grafický kontext Kód pro zobrazení (co se má vykreslit) je v metodě paint (Graphics g) // pro AWT paintcomponent (Graphics g) // pro Swing Tyto zděděné prázdné metody je třeba přepsat (+ volání metody předka) Pro zobrazení komponenty se volá clearrect( ); // vymazání plochy (části) barvou pozadi paint( ); // nebo paintcomponent( ) pro vykr. obsahu Pro programové překreslení se volá metoda repaint(), která volá update (Graphics g) { g.clearrect( ); // zabezpečí vymazání paint (g); // respektive paintcomponent(g); } přepsáním metody update() lze zabezpečit NEPŘEMAZÁVÁNÍ původního obsahu package java.awt; class Graphics V JAVĚ je grafický kontext STAVOVÝ (pamatuje si stav, např. nastavenou barvu) Umožňuje přístup ke kreslící ploše Identifikuje plochu, kam se posílá grafický vstup Je zabalen do instance třídy Graphics Instanci Graphics lze získat pro každou třídu, která je potomkem Components jako parametr v kreslících metodách pomocí metody getgraphics(), která vytvoří nový grafický kontext pro danou komponentu Třída Graphics2D a související třídy budou probrány později. Přednáška 3 3 Přednáška 3 4

Atributy Graphics Komponenta, se kterou je kontext asociován Souřadnice počátku souřadnicového systému K počátku se vztahuje kreslení ořezávání Ořezávací oblast (Clip) Aktuální barva Aktuální font Režim kreslení (XOR režim, normální kreslící režim) Ořezávání výstupu Grafický výstup je realizován pouze do oblasti, která je k tomu určena clip Nastavení ořezávací oblasti void cliprect (int x, int y, int width, int height) průnik současné ořezávací oblasti a nového pravoúhelníku void setclip (Shape clip) parametr null maže ořezávací oblast void setclip(int x, int y, int width, int height) Zjištění ořezávací oblasti Shape getclip() Rectangle getclipbounds() Přednáška 3 5 Přednáška 3 6 Vymazání plochy, kopírování Double Buffering void clearrect(int x, int y, int width, int height) vymaže plochu barvou pozadí, která je nastavena pro danou komponentu ekvivalent: setcolor + fillrect Kopie pravoúhlé oblasti na zadanou pozici void copyarea(int x, int y, int width, int height, int dx, int dy) Technika, zamezující blikání obrazu Blikání vzniká v důsledku postupného překreslování obrazu hotový snímek vymazání obsahu postupné vykreslení jednoho objektu vykreslení dalšího objektu = hotový snímek Přednáška 3 7 Přednáška 3 8

Princip Double Bufferingu Grafický souřadnicový systém Vymazání Stejný jako SS komponent Kreslení [0, 0] Kreslení height Back buffer [width-1, height-1] Zobrazení (rychlé zkopírování) na primární plochu width Přednáška 3 9 Přednáška 3 10 Barva 255, 255, 255 Základní barvy Založena na modelu RGB (ARGB) Implicitně se pracuje s barevným prostorem srgb Barevné složky: R (Red), G (Green), B (Blue), A (Alpha value) 255, 255, 255 128, 0, 0 255, 0, 0 0, 255, 255 0, 128, 128 Povolený rozsah 192, 192, 192 0.0F..1.0F 0..255 Význam hodnot Při nedodržení rozsahu dojde k výjimce! 128, 128, 128 0, 128, 0 0, 255, 0 255, 0, 255 128, 0, 128 0 (0.0F) pro barvu: nulový jas; α-kanál: úplná průhlednost 255 (1.0F) pro barvu: maximální jas; α-kanál: 100 % krytí (A, R, G, B) (255, 204, 51, 0) (192, 204, 51, 0) (128, 204, 51, 0) (64, 204, 51, 0) (0, 204, 51, 0) 64, 64, 64 0, 0, 128 0, 0, 255 255, 255, 0 128, 128, 0 0, 0, 0 Přednáška 3 11 Přednáška 3 12

Třída Color Systémové barvy package java.awt Obsahuje 13 statických prvků pro základní barvy : BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, YELLOW Konstruktory Color (int rgb) // R: bity 23..16; G: bity 15..8; B: bity 7..0 // (RRRRRRRRGGGGGGGGBBBBBBBB) Color (int r, int g, int b) Color (int r, int g, int b, int a) Color (float r, float g, float b) Color (float r, float g, float b, float a) Color (int rgba, boolean hasalpha) pokud (hasalpha==true) bity 31..24 jsou použity pro alfa kanál jinak jsou ignorovány a je vytvořena barva s krytím 100 % Přednáška 3 13 package java.awt; Konstantní třída SystemColor Obsahuje statické prvky: activecaption, activecaptiontext, control, controltext, desktop, inactivecaption, Prvky odpovídají barvám nastaveným v systému Color c = SystemColor.desktop; // barva pracovní plochy Přednáška 3 14 Barevné složky Barevné složky modelu RGB lze získat pomocí metod třídy Color int getred() int getgreen() int getblue() int getalpha() Příklad: vytvoření světlejší barvy (ne úplně korektní) Color c = SystemColor.control; int r = c.getred() r = ((r+10)>255)? 255 : r+10; int g = c.getgreen() g = ((g+10)>255)? 255 : g+10; int b = c.getred() b = ((b+10)>255)? 255 : b+10; Color novabarva = new Color(r, g, b); Systémová barva pozadí komponenty! Nutno kontrolovat rozsah 0..255! Takto vzniklá barva je světlejší, ale má posunutý barevný odstín! Nastavení barvy kreslení Grafický kontext obsahuje pouze jednu barvu, kterou se kreslí obrysy (při použití metod drawxxx) výplně (při použití metod fillxxx) setcolor (Color c) Color getcolor ) setcolor(new Color(16777215)); // nastavení bílé barvy 256^3 setcolor(new Color(255, 0, 0)); // červená setcolor(color.red); // červená setcolor(systemcolor.activecaption); // systémová barva // aktivního titulkového pruhu Přednáška 3 15 Přednáška 3 16

Další metody třídy Color Světlejší a tmavší odstín (vratná operace, ale díky zaokrouhlení ne na přesně stejnou hodnotu). Vždy 100 % krytí. Color darker() Color brighter () Konverze mezi HSL a RGB modelem (statické metody) int HSBtoRGB(float hue, float satur, float brightness) float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) Color gethsbcolor(float h, float s, float b) Barevné složky float[] getrgbcolorcomponents(float[] comparray) float[] getrgbcomponents(float[] comparray) + 2 metody pracující dle nastaveného barevného modelu Kreslení grafických primitiv drawxxx ( ) fillxxx ( ) drawstring ( ) drawimage ( ) Převod na číselné vyjádření (včetně alfa kanálu) int getrgb() TEXT Přednáška 3 17 Přednáška 3 18 Úsečka, lomená čára void drawline(int x1, int y1, int x2, int y2) souřadnice počátečního bodu: [x1, y1] souřadnice koncového bodu: [x2, y2] kreslí čáru včetně počátečního a koncového bodu void drawpolyline(int[] xpoints, int[] ypoints, int npoints) lomená čára pokud je poslední a první bod totožný, je uzavřena Příklad kreslení úsečky a lomené čáry g.drawline(3, 2, 10, 5); g.setcolor(color.red); g.drawline(2, 5, 2, 8); g.drawline(10, 2, 10, 2); int x[] = {2,12,11,1}; int y[] = {2,7,0,9}; g.drawpolyline(x, y, 4); Přednáška 3 19 Přednáška 3 20

Pravoúhelník void drawrect(int x, int y, int width, int height) levý horní roh: [x, y] pravý dolní roh: [x+width, y+height] void fillrect(int x, int y, int width, int height) levý horní roh: [x, y] pravý dolní roh: [x+width-1, y+height-1] Pravoúhelník s oblými rohy void drawroundrect(int x, int y, int width, int height, int arcwidth, int archeight) pravoúhelník se zakulacenými rohy arcwidth horizontální poloměr rohových oblouků archeight vertikální poloměr rohových oblouků void fillroundrect(int x, int y, int width, int height, int arcwidth, int archeight) pravoúhelník se zakulacenými rohy arcwidth horizontální poloměr rohových oblouků archeight vertikální poloměr rohových oblouků rozměry totožné s fillrect Přednáška 3 21 Přednáška 3 22 Příklad kreslení pravoúhelníku Kružnice, elipsa, kruh g.drawrect(2, 2, 10, 5); g.drawline(12, 7, 12, 7); g.setcolor(color.red); g.fillrect(2, 2, 10, 5); fill + draw draw + fill void drawoval(int x, int y, int width, int height) elipsa (kružnice) vepsaná do pravoúhelníku levý horní roh: [x, y] pravý dolní roh: [x+width, y+height] void filloval(int x, int y, int width, int height) elipsa (kružnice) vepsaná do pravoúhelníku g.drawline(12, 7, 12, 7); Přednáška 3 23 Přednáška 3 24

Příklad kreslení elipsy a eliptické výplně Kruhový a eliptický oblouk, výseč g.drawline(12, 7, 12, 7); g.drawoval(2, 2, 10, 5); fill + draw void drawarc(int x, int y, int width, int height, int startangle, int arcangle) střed oblouku leží ve středu pravoúhelníku s levým horním rohem v [x, y] s pravým dolním rohem [x+width, y+height] Oblouk se kreslí od startangle () arcangle: + (proti směru h.r.), - (po směru h.r.) g.drawline(12, 7, 12, 7); g.setcolor(color.red); g.filloval(2, 2, 10, 5); draw + fill void fillarc(int x, int y, int width, int height, int startangle, int arcangle) Přednáška 3 25 Přednáška 3 26 Příklad kreslení oblouku a výseče N-úhelník g.drawline(14, 10, 14, 10); g.setcolor(color.white); g.drawoval(2, 2, 12, 8); g.drawarc(2, 2, 12, 8, 0, 230); g.drawline(14, 10, 14, 10); g.setcolor(color.yellow); g.filloval(2, 2, 12, 8); g.setcolor(color.red); g.fillarc(2, 2, 12, 8, 0, 230); fill + draw draw + fill void drawpolygon(int[] xpoints, int[] ypoints, int npoints) automatické uzavření v případě, že první a poslední bod jsou různé drawpolygon(polygon p) void fillpolygon(int[] xpoints, int[] ypoints, int npoints) fillpolygon(polygon p) Vyplňování nekonvexních polygonů probíhá v režimu Alternate, tj. střídání vyplněných a nevyplněných ploch (jiný režim, zde nepodporovaný je Winding ) Přednáška 3 27 Přednáška 3 28

Příklad kreslení n-úhelníku int x[] = {2,12,11,1}; int y[] = {2,7,0,9}; g.fillpolygon(x, y, 4); Zobrazení textu void drawstring(string str, int x, int y) zobrazí zadaný řetězec tak, že BASELNE levého znaku leží na y-ové souřadnici vztažného bodu [x, y] používá font a barvu nastavenou v grafickém kontextu int x[] = {2,12,11,1}; int y[] = {2,7,0,9}; g.setcolor(color.red); g.fillpolygon(x, y, 4); fill + draw draw + fill Nastavení fontu void setfont(font font) Font getfont() Text [x,y] Přednáška 3 29 Přednáška 3 30 Font rychlý přehled Konstruktor Font (String name, int style, int size); Name (MS Win): CourierNew (Nonospaced), Arial (SansSerif), TimesNewRoman (Serif), Arial (Dialog), CourierNew (DialogInput) style: Font.BOLD, Font.PLAIN, Font.ITALIC size: velikost v typografických bodech (1/72 ) Font = new Font ( Arial, Font.ITALIC + Font.Bold, 12); Rodina písma (FontFamily) Dostupné fonty GraphicsEniroment ge = GraphicsEnviroment.getLocalGraphicsEnviroment; Font[] fontfamily = ge.getallfnts(); Metrika fontu FontMetrics Měření fontu Graphics.getFontMetrics() metrika aktuálního fontu Graphics.getFontMetrics(Font f) metrika libovolného fontu FontMetrics fm = g.getfontmetrics(); int width = fm.stringwidth( Dobrý den! ); getleading() getascent() getdescent() getheight() getmaxascent() getmaxascent() charwidth (char c) stringwidth(string s) HODNOTY jsou v pixelech getascent() getdescent() getleading() Akcentová dotažnice (Ascende Line) Horní dotažnice getheight() Účaří (Base Line) Dolní dotažnice (Descender Line) Přednáška 3 31 Přednáška 3 32

Zobrazení rastrového obrázku přehled XOR režim drawimage(image img, int x, int y, ImageObserver observer) drawimage(image img, int x, int y, Color bgcolor, ImageObserver observer) drawimage(image img, int x, int y, int width, int height, ImageObserver observer) drawimage(image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) drawimage(image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) drawimage(image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) Návratová hodnota: boolean, nastavena na true, pokud je obrázek kompletně načten a nebude se měnit bgcolor: podkladová barva, využitá při průhlednosti observer: objekt, sledující stav zpracování obrázku XOR negace ekvivalence Metody Graphics SetPaintMode SetXORMode Přednáška 3 33 Přednáška 3 34 Výběr barvy pomocí dialogu Výběr fontu pomocí dialogu Color puvodnibarva = getbackground(); Color novabarva = JColorChooser.showDialog (null, "Výběr barvy", puvodnibarva) if (novabarva!=null) { setbackground(novabarva); } JFontChooser fontchooser = new JFontChooser(); int result = fontchooser.showdialog(parent); if (result == JFontChooser.OK_OPTION) { Font font = fontchooser.getselectedfont();... } Přednáška 3 35 Přednáška 3 36

Události myši Práce s tlačítky myši Listener: MouseEvent (addmouselistener) Handler: MouseListener (parametr MouseEvent) mouseclicked() mouseentered() mouseexited() mousepressed() mousereleased() Pohyb myši Listener: MouseMotionEvent (addmousemotionlistener) Handler: MouseMotionListener (parametr MouseEvent) mousemotiondragged() mousemotionmoved() Přednáška 3 37