Graphic Device Interface (GDI)
Tutustutaan Windowsin tarjoamiin rajapintoihin grafiikan tuottamisessa. Opetellaan yksinkertaiset piirto-operaatiot GDI+-rajapinnalla
Luentoesimerkki (GDI_2012.zip)
Sinikäyrää (liike.zip) Tässä ei käytetä GDI:tä!
- GDI (Youtube)
- tjlahton2012-02-14_1036.mp4 53.2 Mt
- tjlahton2012-02-14_1036.wmv 73.2 Mt
- tjlahton2012-02-14_1036.mp3 22.7 Mt
Windowsin grafiikkarajapinnat
- GDI (1985)
- Laiteriippumaton - ohjelmat näkevät vain loogisen piirtoalueen
- Ei osata hyödyntää laitekohtaisia erikoisominaisuuksia
- Jokainen graafinen objekti kuluttaa tietyn määrän GDI-objekteja
- GDI-objektit muunnetaan laitteen ymmärtämään muotoon (rasteroidaan)
- Voitaisiin hyödyntää laitteistokiihdytystä mutta ei juurikaan käytetä
- immediate rendering mode
- Laiteriippumaton - ohjelmat näkevät vain loogisen piirtoalueen
- GDI+ (2001 / Windows XP)
- kaksiulotteinen vektorigrafiikka
- Tuki useille kuvaformaateille ja kuvankäsittelyoperaatioille
- Anti-aliasing (reunanpehmennys)
- ARGB (läpinäkyvyys)
- Hitaampi kuin GDI mutta parempilaatuinen lopputulos
- DirectX (1995)
- Mahdollistaa suoran pääsyn näytönohjaimiin
- Laitteistokiihdytys
- Direct3D
- DirectDraw
- Direct2D ja DirectWrite (2009)
- Korvaa jatkossa DirectDrawn ja GDI+n
- Windows 7 tukee
- Nopeampi kuin GDI/GDI+
Käyttöliittymän renderointi
- Ennen Windows Vistaa kaikki ohjelmat piirsivät samaan puskuriin, joka vastasi
työpöytää
- Ohjelmat piirtävät toistensa päälle ja joutuvat käsittelemään WM_PAINT-viestejä eli piirtämään aina tarvittaessa uudelleen oman osuutensa näytöstä
- Välkyntä korjataan tuplabufferoinnilla
- Vista toi mukanaan läpinäkyvyyden ym.
- Jokaiselle ohjelmalle oma piirtopuskuri vaikka ohjelma luuleekin sen olevan kuten ennenkin
- Käyttöjärjestelmä päättelee ohjelmien puskureiden perusteell lopullisen näkymän
- Retained mode
- Osaa hyödyntää DirectX-ominaisuuksia tilanteesta riippuen
- GDIn muistiin tuottama näkymä kopioidaan bittikarttana näytönohjaimeen
- Toimii huonosti ja hitaasti Windows Vistassa mutta on paranneltu Windows 7:ssä
- DirectX-ohjelmat kirjoittavat suoraan näytönohjaimen muistiin
- GDIn muistiin tuottama näkymä kopioidaan bittikarttana näytönohjaimeen
Kontrollien ulkoasun piirtäminen
Kontrollin Paint-tapahtuma tapahtuu aina, kun kontrolli pitäisi piirtää uudelleen näytölle.
PaintEventArgs sisältää kahvan piirtämistä varten ja tiedon piirtoalueesta.
Kun uudelleenmäärittelet (override) OnPaint-metodin niin kutsu myös pääluokan OnPaint-metodia (base.OnPaint) paitsi jos piirrät koko piirtoalueelle.
Älä koskaan kutsu suoraan OnPaint-metodia vaan käytä Invalidate-metodia.
Piirtäminen onnistuu Graphic-luokalla.
Käyttäjien kommentit