Microsoft Windowsi Graafikaseadme liides (GDI): definitsioon ja funktsioonid

Avasta Microsoft Windowsi Graafikaseadme liide (GDI): definitsioon ja funktsioonid — joonistamine, fontide renderdamine, printerite/ekraanide abstraktsioon ja skaleerimine.

Autor: Leandro Alegsa

Graafikaseadme liides (GDI) on Microsoft Windowsi põhikomponent ja API, mida kasutatakse 2D-graafiliste objektide joonistamiseks ning nende edastamiseks väljundseadmetele nagu printerid ja monitorid. GDI pakub seadme- ja riistvarast sõltumatut kihti, mis võimaldab rakendustel joonistada jooni, kujundeid, teksti ja bitmape ilma, et programm peaks tundma iga konkreetse seadme madala taseme detaile.

Põhiomadused ja funktsioonid

GDI vastutab mitmete tavaliste graafikatööde eest, näiteks:

  • joonte, kõverate ja ristkülikute joonistamine;
  • fontide renderdamine ja teksti väljund (nt DrawText, TextOut);
  • bitmappide kopeerimine ja teisaldamine (BitBlt, StretchBlt);
  • värvipalettide ja värvirežiimide haldamine;
  • klippimise ja regionide kasutamine keerukamate jooniste piiramiseks;
  • metafailide (WMF/EMF) genereerimine ja kasutamine trüki- ning spooling-töös.

GDI ei joonista tavaliselt otse akende kasutajaliidese komponente (menüüd, akna raamid jne) — sellel põhineb kõrgem aluskiht, mis haldab akende ja kasutajaliidese elementide tegelikku joonistamist.

GDI objektid ja seadme-kontekstid

Põhimõtteliselt töötab GDI läbi seadmekonteksti (Device Context, HDC) ja mitme tüüpi GDI-objektide abil, mida rakendus loob ja valib konteksti:

  • pliiatsid (pens) joone omaduste jaoks;
  • pintslid (brushes) täitmiseks;
  • fontid (fonts) teksti jaoks;
  • bitmapi objektid piltide hoidmiseks;
  • regionid ja teed (paths) keerukamate kujundite jaoks.

Seadmekontekst sisaldab informatsiooni skaleerimise, koordinaatsüsteemi, värviruumide ja klippimise kohta ning võimaldab sama joonistusloogikat rakendada erinevatele seadmetele.

Seadmete abstraktsioon ja printimine

Üks GDI suurimaid eeliseid on seadmete abstraktsioon: sama joonistusloogika saab reprodutseeruda nii ekraanil kui ka printeril. Trükkimise puhul kasutatakse sageli vektorpõhist spoolimist (EMF), kus GDI kõnesid salvestatakse spool-faili ja seejärel printeridraiver teisendab need printerile sobivaks väljundiks. See tagab WYSIWYG-tüüpi tulemuse paljude rakenduste jaoks.

Piirangud ja millal valida teised tehnoloogiad

GDI on võimas 2D-API, kuid tal on piirangud, mis teevad selle sobimatuks tänapäevaste nõudlike graafikarakenduste jaoks:

  • puudub riistvareline 3D-kiirendus ja 3D rasteriseerimine — seetõttu pole sobiv keerukate 3D- või intensiivsete mängumootorite jaoks;
  • puudub raamipuhvri sünkroniseerimise mõiste (vt võrdlus DirectXi ja OpenGLi kasutamisega), mis raskendab sujuvat animatsiooni ja kõrge kaadrisagedusega joonistamist;
  • GDI opsioonide riistvariline aktseleratsioon on piiratud ja varieerub Windowsi versiooniti — suurem osa töötlusest toimub CPU-l;
  • GDI-objektide lekkimine (mittevabanenud HDC, pensid, pintslid jms) võib viia süsteemi GDI-sessiooni ressursside ammendumiseni — iga protsessi GDI-objektide arv on piiratud;
  • võrreldes uuemate API-dega (näiteks Direct2D, DirectWrite, GDI+) on puuduvad kaasaegsed funktsioonid nagu sujuv alfa-blending, anti-aliasing vektoritele ja täpsem pilditöötlus.

GDI+

GDI+ on GDI täiendav raamatukogu, mis lisab parema toe alfa-kanalile, gradiente, pildiformaatidele (JPEG, PNG), kõrgema kvaliteediga anti-aliasingu ja lihtsama objektorienteeritud liidese. GDI+ on mugavam arendajale, kuid see ei muuda täielikult GDI põhilisi jõudlus- ja aktseleratsioonipiiranguid.

Tänapäevased alternatiivid

Tänapäeval, kui on vaja sujuvat animatsiooni, riistvarakiirendust või keerukat 2D/3D-graafikat, eelistavad arendajad tihti järgmisi lahendusi:

  • Direct2D ja DirectWrite — 2D-joonistus ja tekstirenderdamine, riistvarakiirendusega;
  • DirectX (sh Direct3D) — mängude ja interaktiivse 3D-sisu jaoks;
  • OpenGL või Vulkan — platvormideülene riistvarapõhine 3D-graafika;
  • kõrgema taseme raamistike ja C#/.NET puhul GDI+ (System.Drawing) või uuemates lahendustes spetsiaalsed teegid.

Hea praktika arendajale

  • vähenda SelectObject kutsumisi ja vali tagasi algsed GDI-objektid enne vabastamist;
  • kasuta topeltpuhverdust (double buffering) vilkumise vältimiseks;
  • vabasta alati GDI-ressursid (pensid, pintslid, bitmapi objektid, HDC) et vältida lekkimist;
  • prügi GDI-d intensiivsetes reaalajas graafikaülesannetes — eelistada Direct2D/Direct3D, kui vaja riistvarakiirendust;
  • testi trüki- ja ekraaniväljundit erinevates seadmetes, kuna värviruumid ja resolutsioonid võivad erineda.

Lihtsad mängud ja rakendused, mis ei nõua kõrget kaadrisagedust ega 3D-funktsionaalsust, kasutavad sageli GDI-d. Kuid tänapäevaste mängude ja graafikaliselt nõudlike rakenduste puhul kasutatakse tavaliselt DirectXi või OpenGLi (või nende järglasi), mis annavad arendajatele otsese ligipääsu kaasaegse riistvara võimsusele.

Küsimused ja vastused

K: Mis on graafikaseadme liides (GDI)?


V: Graphics Device Interface (GDI) on Microsoft Windowsi API, mida kasutatakse graafiliste objektide kujutamiseks ja nende saatmiseks väljundseadmetele, näiteks printeritele või monitoridele.

K: Milliste ülesannete eest vastutab GDI?


V: GDI vastutab selliste ülesannete eest nagu joonte ja kõverate joonistamine, fontide renderdamine ja palettide käsitlemine.

K: Milliste ülesannete eest GDI EI vastuta?


V: GDI EI vastuta otseselt akende, menüüde jne joonistamise eest. See ülesanne on reserveeritud teisele GDI peal ehitatud allsüsteemile.

K: Millised on teised süsteemid, mille komponendid on GDI-le sarnased?


V: Muud süsteemid, millel on GDI-le sarnased komponendid, on näiteks Macintoshi QuickDraw ja GNOME/GTK GDK/Xlib.

K: Millised on GDI kõige olulisemad võimalused võrreldes otsesemate riistvarale juurdepääsu meetoditega?


V: GDI kõige olulisem võime võrreldes otsesemate riistvarale juurdepääsu meetoditega on selle skaleerimisvõime ja sihtseadmete abstraktsioon.

K: Mis on kõigi Microsoft Windowsi What You See Is What You Get rakenduste keskmes?


V: Võime joonistada mitmele seadmele, näiteks ekraanile ja printerile, ning oodata iga kord nõuetekohast taasesitust on kõigi Microsoft Windows'i jaoks mõeldud What You See Is What You Get rakenduste keskmes.

K: Mis on GDI peamine puudus kaasaegsete mängude puhul?


V: GDI peamine puudus kaasaegsete mängude puhul on see, et see ei suuda korralikult animeerida, kuna tal puudub mõiste sünkroniseerida framebufferiga ja tal puudub 3D rasteriseerimine. Kaasaegsed mängud kasutavad selle asemel tavaliselt DirectXi või OpenGLi, mis annavad programmeerijatele võimaluse kasutada kaasaegse riistvara funktsioone.


Otsige
AlegsaOnline.com - 2020 / 2025 - License CC3