Obsah přednášky. GDI+ Tvorba vlastních komponent Vlastní kreslení 1/36



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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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

Klíčové pojmy: Události, handlery, třída Graphics, pera, stětce, kreslení vyplněných a nevyplněných objektů.

1.0 Lekce 1: Seznámení s prostøedím. 2.0 Lekce 2: Základní opravy fotografie

Maturitní témata z předmětu Programování a databázové systémy. pro šk. rok 2012/2013

TECHNICKÁ UNIVERZITA V LIBERCI

V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému.

plošný 3D NURBS modelář pracující pod Windows NURBS modely jsou při jakkoliv blízkém pohledu dokonale hladké

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Takto chápanému druhu objektů se říká TŘÍDA.

TECHNICKÁ DOKUMENTACE NA PC

Zásady kreslení Kreslení na obrazovku 139

Gymnázium Jana Pivečky a Střední odborná škola Slavičín. III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT

Návod na použití FEM programu RillFEM Jevy na chladiči

TRANSFORMACE. Verze 4.0

Digitální učební materiál

Kapitola 1: Co je Delphi 19. Překlad projektu 23

Manuál Kentico CMSDesk pro KDU-ČSL

Vzdělávání a podpora pedagogických pracovníků ZŠ a SŠ při integraci ICT do výuky POČÍTAČOVÁ GRAFIKA - 1 -

Informační a komunikační technologie. 1.4 Data, informace, komprimace

Nástroje produktivity

DUM 10 téma: Nástroje malování

DUM 05 téma: Základy obsluha Gimp

WEBMAP Mapový server PŘÍRUČKA PRO WWW UŽIVATELE Hydrosoft Veleslavín, s.r.o., U Sadu 13, Praha 6

Orcad PCB Designer návrh plošných spojů část 2

Využití ICT techniky především v uměleckém vzdělávání. Akademie - VOŠ, Gymn. a SOŠUP Světlá nad Sázavou

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

Grafický návrh v oděvním designu

Obsah 1. Grafický manuál firmy 2. Podklady grafického manuálu 3. Varianty loga 4. Logo a logotyp

Operace nad celými tabulkami

SOFTWARE. Josef Gregor

DATABÁZE DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní:

IDEA RCS 5 Reinforced Concrete Section

================================================================================ =====

Pokročilá práce s proměnnými

Jednotný vizuální styl: podpis v ové korespondenci.

Rastrová a vektorová data

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

Stručný návod na práci v modulu podatelna a výpravna

NÁVRHOVÝ PROGRAM VÝMĚNÍKŮ TEPLA FIRMY SECESPOL CAIRO PŘÍRUČKA UŽIVATELE

3. Restrukturalizace nebo manipulace s údaji - práce s rastrovými daty

Formáty pro rastrovou grafiku

Vytvoření nebo odstranění makra Excel

ISZR Referenční agent.net

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jiří Haňáček [ÚLOHA 03 VYSUNUTÍ TAŽENÍM A SPOJENÍM PROFILŮ.]

DPC-D218ID. Dveřní stanice pro 2D systém videovrátných. Uživatelský manuál

Mikromarz. CharGraph. Programovatelný výpočtový měřič fyzikálních veličin. Panel Version. Stručná charakteristika:

Kapitola 5 WCF, webové služby a mezidoménové zásady

Tisk, Databázové okno, Editace

Cvičné příklady Hodina 2

PŘÍLOHA 10 SMLOUVY O PŘÍSTUPU KE KONCOVÝM ÚSEKŮM. Pravidla a postupy

Záloha a obnovení Uživatelská příručka

Komfortní datová schránka

Příručka poskytovatele Národního geoportálu INSPIRE

Android Elizabeth. Verze: 1.3

Zadávání tiskových zakázek prostřednictvím JDF a Adobe Acrobat Professional

Utility library for DirectX 9.0 Technická dokumentace

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jana Kalinová [ÚLOHA 01 ÚVOD DO PROSTŘEDÍ OBJEMOVÁ SOUČÁST; PŘÍKAZ SKICA A JEJÍ VAZBENÍ]

INFORMATIKA pro LÁZEŇSTVÍ. Ing. Petr Janík

4 Část II Základy práce v systému. 6 Část III Úvodní obrazovka. 8 Část IV Práce s přehledy. 13 Část V Kontakty. 19 Část VI Operativa

Přidávání animací do programů

Vyplňte API klíč, který si vygenerujete v Nastavení obchodu v profilu Uloženky v části Nastavit klíč pro API.

Určeno k použití s aplikacemi podporujícími skener / čtečku kódů QR.

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

SAUT 3.1. program pro vyhodnocení výsledků zkoušení impulzní odrazovou metodou

Příloha: Dodatečné informace, včetně přesného znění žádosti dodavatele o dodatečné informace

PHP Best Practices. Please try to fit your code to 80 columns. That's decimal 80. A. Morton

téma: Formuláře v MS Access

Šicí stroje NX-400 NX-200

Integrovaný Ekonomický Systém Zakázkový list - IES WIN 2006

10 Ostatní aplikace desek CETRIS Záhonový obrubník CETRIS.

Komprimace grafických dat, formáty počítačové grafiky

PRACOVIŠTĚ PRO DLOUHODOBÉ UCHOVÁVÁNÍ A ZPŘÍSTUPŇOVÁNÍ DOKUMENTŮ V DIGITÁLNÍ PODOBĚ NÁRODNÍ DIGITÁLNÍ ARCHIV

Projekt: 1.5, Registrační číslo: CZ.1.07/1.5.00/ Zoner Photo Studio

Na následující stránce je poskytnuta informace o tom, komu je tento produkt určen. Pro vyplnění nového hlášení se klikněte na tlačítko Zadat nové

Průvodce mapovými službami (MapInSpire)

spočte histogram hodnot v zadaném poli, tj. kolik prvků je v kterém intervalu hodnot [pole, [binsize, locations, max, min, nbins, /nan]

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 8

Grafický manuál TEREZA z.ú. jednotný vizuální styl

TECHNICKÉ KRESLENÍ A CAD

Nastavení telefonu T-Mobile MDA Touch

DUM 09 téma: Vytvoření a uložení nového obrázku

Server. Software serveru. Služby serveru

DUM 02 téma: Formáty souborů rastrové grafiky

Nejlepší zhodnocení veřejných prostředků

Autodesk Inventor 8 vysunutí

KINEMATICKÉ ELEMENTY K 5 PLASTOVÉ. doc. Ing. Martin Hynek, Ph.D. a kolektiv. verze - 1.0

DoorSet. Návod k použití. PC program pro Windows 98 a novější

2/3.3 Spis. Správní řád v praxi. 2/3.3 str. 1

Přesně cílená reklama

Objektově orientované databáze

Informační systém pro rezervaci pokojů hotelu SPORT

Popis služby Vzdálená kolokace

DOTWALKER NAVIGACE PRO NEVIDOMÉ A SLABOZRAKÉ

Digitální učební materiál

POČÍTAČOVÁ PODPORA ZPRACOVÁNÍ TÝMOVÝCH PROJEKTŮ - MATHCAD

Špičkový diktafon nejkvalitnější možný záznam v PCM kvalitě

Popis úlohy. Číslo. cs24601

Modul informačního systému SPŠSE Liberec

Transkript:

Obsah přednášky GDI+ Tvorba vlastních komponent Vlastní kreslení 1/36

Graphics Device Interface Služba Windows Framework poskytuje obalující třídy Umožňuje programování 2D grafiky bez znalosti konkrétního HW Umožňuje jednotný přístup k různému HW (obrazovka, tiskárna,...) 2/36

Základní možnosti 2D vektorová grafika Čáry, křivky, plnění,... Bitmapová grafika Práce s bitmapou Bitmapové formáty Typografie Vykreslování textu Fonty 3/36

Grafický kontext Virtuální plátno Zapouzdřen do instance Graphics Možnost získání Z PaintEventArgs (obsluha události Paint) Příklad: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { e.graphics.drawline(new Pen(Color.Red,3),1,1,50,50); } 4/36

Grafický kontext Možnost získání Z metody Control.CreateGraphics Příklad: Graphics g = this.creategraphics(); g.drawline(new Pen(Color.Blue,3),5,1,50,55); Z objektu dědícího od Image Graphics Graphics.FromImage(Image) Příklad: Graphics g = Graphics.FromImage(pictureBox1.Image); g.drawline(new Pen(Color.Pink,3),1,1,40,40); picturebox1.invalidate(); 5/36

Třída Graphics Funguje jako stavový automat Něco nastavím, nastavení zůstává platné, dokud jej nezměním Uložení stavu GraphicsState Graphics.Save() Obnovení stavu Graphics.Restore(GraphicsState) Nastavení kvality SmoothingMode Default, HighSpeed, HighQuality, AntiAlias 6/36

Nastavení aktivní oblasti Region Clip Nastavení transformační matice Matrix Transform Matice 3x3 7/36

Transformační matice Proč 3x3 pro 2D? Posunutí bodu o vektor v Bx = Ax + vx By = Ay + vy A B Rotace o úhel fi Bx = cos (fi) Ax - sin (fi) Ay By = sin (fi) Ax + cos (fi) Ay (pomůcka: když fi=0, nesmí se nic stát) y B fi A 0 x Změna měřítka Bx = Ax. Sx By = Ay. Sy A B 0 x 8/36

Transformační matice Pomocí vektorů Posunutí [ Bx By] = [ Ax Ay] [ Vx Vy] Rotace o úhel fi [ Bx By] = [ cos fi sin fi sin fi Ay] cos fi ] [ Ax Změna měřítka [ Bx By] = [ Sx 0 0 Sy] [ Ax Ay] Rotace a změna násobení matic 9/36

Transformační matice Zavedení homogenních souřadnic 2D -> 3D (třetí rozměr budeme ignorovat) Posunutí [Bx]=[1 0 Vx] [Ax ] By 0 1 Vy Ay 1 0 0 1 1 Rotace o úhel fi [Bx]=[cos fi sin fi 0 By sin fi cos fi 0 Ay 1 0 0 1] [Ax ] 1 Změna měřítka [Bx]=[Sx 0 0 By 0 Sy 0 Ay 1 0 0 1] [Ax ] 1 10/36

Transformační matice Výhody Možnost složit složitější operaci přede a pak přenásobit všechny body M = R1. T1. R2 A Snazší implementace Možnost rozšířit do 3D Použití v 3D kartách 11/36

Třída Matrix Definuje transformaci souřadnic pomocí homogenní souřadnic Matice 3x3 Možno použít předdefinované metody Multiply (násobení matic skládání operací) Rotate, Translate (rotace, posun) Možno transformovat body ručně TransformPoints 12/36

Třída PrintDocument Obsahuje nastavení tisku Událost PrintPage Vrací i kontext tiskárny Metoda Print Zahajuje vlastní tisk Možno předat dialogům pro nastavení tiskárny, preview, 13/36

Třída PrintDocument příklad private void button1_click(object sender, System.EventArgs e) { PrintDocument doc = new PrintDocument(); doc.printpage += new PrintPageEventHandler(this.doc_PrintPage); doc.print(); } private void doc_printpage(object sender, PrintPageEventArgs ev) { ev.graphics.drawline(new Pen(Color.Black,1),0,0,10,10); ev.hasmorepages = false; } 14/36

Třída Brush Štětce jakým způsobem se budou vyplňovat oblasti Abstraktní třída Možnosti vytvoření Třída Brushes jednoduché štětce White,Black,... Odděděné třídy SolidBrush(Color) HatchBrush(HatchStyle, Color, Color) BitmapBrush(Bitmap) LinearGradientBrush(Point,Point,Color,Color) 15/36

Třída Brush příklady HatchBrush brush = new HatchBrush(HatchStyle.DarkUpwardDiagonal, Color.Yellow,Color.Black); graphics.fillrectangle(brush,1,1,100,100); Bitmap bitmap = new Bitmap("C:\\windows\\winnt.bmp"); TextureBrush brush = new TextureBrush(bitmap); graphics.fillellipse(brush,1,1,200,200); LinearGradientBrush brush = new LinearGradientBrush(new Point(5,5), new Point(100,10), Color.Red, Color.White); graphics.fillpolygon(brush,new Point[] { new Point(50,5), new Point(5,100), new Point(100,30)}); 16/36

Třída Pen Pero jak se budou kreslit čáry Možnosti vytvoření Třída Pens jednoduché štětce Konstruktory Pen(Color) Pen(Color,float) Pen(Brush) Pen(Brush,float) 17/36

Začátek a konec čáry StartCap, EndCap enum LineCap Flat, Round, Square, Triangle,... Styl čárkování DashStyle enum DashStyle Dash, DashDot, DashDotDot, Dot, Solid,... 18/36

Třída Pen příklady Pen pen = new Pen(Color.Red,20); graphics.drawrectangle(pen,25,25,75,75); Bitmap bitmap = new Bitmap("C:\\windows\\winnt.bmp"); TextureBrush brush = new TextureBrush(bitmap); Pen pen = new Pen(brush,50); graphics.drawrectangle(pen,30,30,100,100); Pen pen = new Pen(Color.Red,10); pen.endcap = LineCap.ArrowAnchor; pen.startcap = LineCap.Round; pen.dashstyle = DashStyle.Dot; pen.dashcap = DashCap.Round; graphics.drawline(pen,10,80,80,10); 19/36

Možné tvary Graphics.Draw... - obrysy Graphics.Fill... - vylněné objekty (uzavřené) Obvykle je třeba štětec či pero a řídící body Otevřené Arc, Bezier, Curve, Line Uzavřené ClosedCurve, Ellipse, Pie, Polygon, Rectangle 20/36

Třídy GraphicsPath Umožňuje vytvoření složitějšího tvaru, který se vykreslí jedním perem či štětcem Bezparametrický konstruktor Jednotlivé segmenty se přidávají pomocí Add... (Line, Bezier,...) Uzavření CloseFigure Vykreslení DrawPath, FillPath 21/36

Třída Metafile Umožňuje zaznamenat/načíst posloupnost grafických primitiv Uložení do souboru.emf Načtení z EMF či WMF Konstruktory Metafile (string) načte ze souboru Metafile (string, IntPtr ) - prázdný soubor 22/36

Třída Metafile Graphics graphics = this.creategraphics(); IntPtr hdc = graphics.gethdc(); Metafile metafile = new Metafile("prvni.emf",hdc); Graphics gf = Graphics.FromImage(metafile); gf.drawrectangle(new Pen(Color.Red),5,5,20,20); graphics.releasehdc(hdc); metafile.dispose();... metafile = new Metafile("prvni.emf"); graphics.drawimage(metafile, new Point(20,10)); 23/36

Třída Bitmap Potomek Image Konstruktory Bitmap(string) Bitmapa ze souboru Formát se zvolí automaticky (JPG, BMP, PNG,...) Bitmap(int,int) Nová bitmapa Šířka, výška 24/36

Kreslení do bitmapy graphics = Graphics.FromImage(image) graphics.draw... Vykreslení bitmapy graphics.drawimage(bitmap,point) graphics.drawimage(bitmap,rectangle) Uložení bitmapy Bitmap.Save(string, ImageFormat) ImageFormat properties Bmp, Jpeg, Tiff, 25/36

Třída Font Typografie Zapouzdřuje jeden řez písma Rodina (Arial) Velikost (12) Styl (kurzíva) Konstruktor Font (FontFamily, float) Font (string, float) 26/36

Dostupné rodiny písem FontFamily[] FontFamily.Families Generické rodiny FontFamily.GenericMonospace Neproporcionální písmo (Courier) FontFamily.GenericSansSerif Bezpatkové písmo (Arial) FontFamily.GenericSerif Patkové písmo (Times) 27/36

Velikosti písma Možnost specifikovat jednotky Konstruktor Font(FontFamily, float, GraphicsUnit) Pixel, Point, Milimeter,... Některé jednotky jsou závislé na zařízení Pixely Některé ne Milimetry 28/36

Styl písma Font.Style enum FontStyle Bold, Italic, Regular, Underline, Strikeout Některé lze kombinovat Příklad Font font = new Font( Arial, 12, FontStyle.Bold FontStyle.Italic FontStyle.UnderLine) 29/36

Vypsání Textu Graphics.DrawString(string, Font, Brush, float, float) Nastavení AntiAliasingu Graphics.TextRenderingHint SystemDefault, SingleBitPerPixel, AntiAlias,... Zjištění velikosti textu SizeF Graphics.MeasureString(string, Font) 30/36

Vlastní kontrolky Vytvoření nových kontrolek Oddědí se od Control Mnoho práce než začne něco dělat Pro vykreslení lze použít třída ControlPaint Metody pro kreslení standardních win kontrolek Modifikace existujících kontrolek Oddědí se od požadované kotrolky Upraví se některé metody, aby odpovídaly požadavkům 31/36

Vlastní kontrolky Kompozice existujících kontrolek Oddědí se od UserControl nebo Project -> Add User Control Uživatelské kontrolky mají automaticky podporu pro design Veřejné property lze editovat přímo v MSVS Další informace o chování pomocí atributů BrowsableAttribute Má se zobrazit v okně property CategoryAttribute V jaké kategorii se má zobrazit DescriptionAttribute Popisek property 32/36

Vlastní kontrolky [Description("Popisek k TextCheckBoxu "),Browsable(true), Category("Appearance")] public string MujText { get { // Insert code here. return textbox1.text; } set { // Insert code here. textbox1.text = value; } } 33/36

Vlastní kreslení Někdy nevyhovuje standardní vzhled Možnost upravit si způsob vykreslování např. menu... Událost Paint V případě menu Vlastnost OwnerDraw nastavit na true Události MeasureItem DrawItem 34/36

Vlastní kreslení private void menuitem_drawitem(object sender, System.Windows.Forms.DrawItemEventArgs e) { Font font = new Font("Verdana",10); Rectangle hranice = e.bounds; if(e.state == DrawItemState.NoAccelerator) { e.graphics.fillrectangle(new SolidBrush(Color.FloralWhite), hranice.x, hranice.y, hranice.width, hranice.height+1); e.graphics.fillrectangle(new SolidBrush(Color.Tan), hranice.x, hranice.y, 20, hranice.height+1); e.graphics.drawstring(((menuitem)sender).text, font, Brushes.Tan, hranice.x+20, hranice.y); } else { e.graphics.fillrectangle(new SolidBrush(Color.Wheat), hranice.x, hranice.y, hranice.width-1, hranice.height-1); e.graphics.fillrectangle(new SolidBrush(Color.Tan), hranice.x, hranice.y, 20, hranice.height+1); e.graphics.drawrectangle(new Pen(Color.Tan,1), hranice.x, hranice.y, hranice.width-1, hranice.height-1); e.graphics.drawstring(((menuitem)sender).text, font, Brushes.Tan, hranice.x+20, hranice.y); } } private void menuitem_measureitem(object sender, System.Windows.Forms.MeasureItemEventArgs e) { e.itemheight = 20; e.itemwidth = 100; } 35/36

Konec 36/36