GDI (Grafinio įrenginio sąsaja): Microsoft Windows grafikos API

GDI — Windows 2D grafikos API: tikslus piešimas, mastelio keitimas ir spausdinimas; paprasta daugeliui aplikacijų, tačiau be 3D greičio ir kadrų sinchronizacijos.

Autorius: Leandro Alegsa

Grafinio įrenginio sąsaja yra "Microsoft Windows" API, naudojama grafiniams objektams atvaizduoti ir perduoti į išvesties įrenginius, pvz., spausdintuvus ir monitorius. GDI suteikia bendrą sluoksnį, leidžiantį programoms piešti linijas, kreives, tekstą ir bitmapas nepriklausomai nuo tikslios įrenginio aparatinės įrangos.

Kas atlieka GDI

GDI atlieka užduotis, tokias kaip linijų ir kreivių braižymas, šriftų atvaizdavimas, bitmapių kopijavimas ir paletės tvarkymas. Ji nėra tiesiogiai atsakinga už langų, meniu ir kitų valdiklių piešimą – šias funkcijas dažnai vykdo aukštesnio lygio posistemos, sukurtos ant GDI. Kitose sistemose yra komponentų, panašių į GDI, pavyzdžiui, "Macintosh" QuickDraw ir GNOME/GTK GDK/Xlib.

GDI architektūra ir pagrindinės sąvokos

  • HDC (device context) – pagrindinis GDI objektas, aprašantis, kur ir kaip piešti (ekranas, spausdintuvas, atminties bitmapa). Daugelis GDI funkcijų reikalauja HDC parametro.
  • GDI objektai – piešimo elementai, tokie kaip pieštukai (pens), teptukai (brush), šriftai (font), bitmatos (bitmap), regionai (region). Šiuos objektus reikia kurti ir atlaisvinti rankiniu būdu.
  • Metodai ir funkcijos – įprastos funkcijos: "MoveToEx", "LineTo", "Rectangle", "Ellipse", "TextOut", taip pat bitblt operacijos kaip "BitBlt" ir "StretchBlt".
  • Kartografavimo režimai – koordinatės, mastelis ir transformacijos (skaidai) leidžia GDI abstraguoti nuo konkretaus įrenginio raiškos ir dydžio.

Pagrindiniai privalumai

  • Mastelio ir įrenginių abstrakcija – bene svarbiausias GDI pranašumas, palyginti su tiesiogine prieiga prie aparatinės įrangos, yra jo gebėjimas atvaizduoti tas pačias grafines komandas skirtinguose įrenginiuose su tinkamu mastelio ir kokybės pritaikymu. Dėl to gana paprasta piešti tiek ekrane, tiek spausdintuve ir tikėtis, kad abu atvaizdai bus tinkami.
  • GDI palaiko spausdinimą per spausdinimo tvarkykles, leidžiančias programoms piešti taip, lyg pieštų ekrane, o tvarkyklė pasirūpina spausdinimo formatu.
  • GDI yra paprasta mokytis ir pakankama daugeliui verslo programų ir paprastų žaidimų, kuriems nereikia aukštos spartos grafikos.

Apribojimai ir trūkumai

  • Mažas našumas animacijai ir žaidimams – GDI daugiausia vykdo operacijas CPU lygyje ir neturi pažangios sinchronizacijos su kadrų buferiu, todėl skirta ne intensyvioms realaus laiko 3D ar 2D animacijoms.
  • Be 3D rasterizavimo – GDI neturi aparatūros pagreitinto 3D palaikymo; sudėtingesnė 3D grafika atliekama per DirectX arba OpenGL.
  • Išteklių valdymas – GDI naudoja rankinius valdiklius (HGDIOBJ), kuriuos programuotojas privalo išlaisvinti. Rankų klaidos lemia išteklių nutekėjimus (GDI handle leak) ir gali sulėtinti arba sugadinti sistemą.
  • Ribotos modernios grafikos galimybės – trūksta pažangių efektų kaip aparatūrinė kompozicija, tiesioginė alfa kompozicija ar modernios tekstūros priemonės, kurias siūlo naujesnės bibliotekos (pvz., Direct2D, DirectWrite).

Naudojimo sritys ir alternatyvos

Paprastiems programų GUI piešiniams, spausdinimui ir administraciniams įrankiams GDI dažnai vis dar yra pakankama. Tačiau šiuolaikinėse programose ir žaidimuose, kuriems reikia aukšto našumo 2D/3D grafikos, dažniau naudojamos šios alternatyvos:

  • "DirectX" – ypač Direct3D, naudojama žaidimams ir aparatūros pagreitintai 3D grafikai.
  • OpenGL – platformų kryžminis sprendimas 3D grafikai.
  • Direct2D ir DirectWrite – Microsoft sprendimai moderniai, aparatūriškai pagreitintai 2D grafikai ir aukštos kokybės teksto atvaizdavimui.
  • GDI+ – platesnės 2D grafikos galimybės (antialiasing, alfa kanalai, gradiento užpildai), suteikiančios patogesnę objektinę sąsają palyginti su klasikiniais GDI skambučiais.

Geros praktikos patarimai programuotojams

  • Išleisti išteklius – visada naikinkite sukurti GDI objektus su "DeleteObject" ir išlaisvinkite HDC su "ReleaseDC" ar "DeleteDC", kai jie nebereikalingi.
  • Naudokite dvigubą buferiavimą – norint sumažinti mirksėjimą (flicker) valgomas piešimas atliekamas į atminties bitmatą, o po to vienu "BitBlt" kopijuojamas į ekraną.
  • Stebėkite GDI rankų skaičių – Windows riboja vienu metu naudojamų GDI rankų skaičių; nutekėjimai gali sukelti našumo problemas.
  • Rinkitės tinkamą priemonę – jei jums reikia aparatūrinio pagreitinimo, sklandaus animavimo arba pažangių grafikos efektų, apsvarstykite Direct2D/Direct3D arba kitus modernius API.

Sudėtingesnės temos

GDI palaiko įvairius raster operacijų režimus (ROP kodai), regionų operacijas, paletes ir spalvų konversijas tarp įrenginių. Spausdinimo architektūra dažnai remiasi GDI piešimu į metafailus, kuriuos spausdinimo tvarkyklė vėliau paverčia į spausdintuvo komandas. Dėl šio tarpinio sluoksnio daug programų paprastai „piešia“ tiek ekrane, tiek spausdintuve tą pačią abstrakčią grafiką.

Išvados

GDI yra pamato lygio grafikos API, kuri istoriniu požiūriu užtikrino „Ką matote, tą ir gaunate“ principą daugeliui "Microsoft Windows" programų. Ji vis dar naudinga spausdinimui, paprastiems grafinėms operacijoms ir suderinamumo palaikymui, tačiau moderniai, aparatūrai optimizuotai grafikai dažniau pasirenkami Direct2D, Direct3D ar kiti šiuolaikiniai sprendimai. Žinoti GDI principus naudinga tiek dirbant su senomis programomis, tiek suprantant aukštesnio lygio grafikos sistemų veikimą.

Klausimai ir atsakymai

K: Kas yra grafinių įrenginių sąsaja (GDI)?


A: Grafinio įrenginio sąsaja (GDI) yra "Microsoft Windows" API, naudojama grafiniams objektams atvaizduoti ir siųsti į išvesties įrenginius, pavyzdžiui, spausdintuvus ar monitorius.

K: Už kokias užduotis atsakinga GDI?


A: GDI atsako už tokias užduotis, kaip linijų ir kreivių braižymas, šriftų atvaizdavimas ir paletės tvarkymas.

K: Už kokias užduotis GDI NĖRA atsakingas?


A: GDI NĖRA tiesiogiai atsakingas už langų, meniu ir pan. piešimą. Šią užduotį atlieka kita posistemė, sukurta ant GDI.

K: Kokios kitos sistemos turi komponentus, panašius į GDI?


A: Kitos sistemos, turinčios į GDI panašius komponentus, yra "Macintosh" "QuickDraw" ir GNOME/GTK GDK/Xlib.

K: Kokia yra svarbiausia GDI savybė, palyginti su tiesioginiais prieigos prie aparatinės įrangos metodais?


A: Svarbiausias GDI pranašumas, palyginti su tiesioginiais prieigos prie aparatinės įrangos metodais, yra jo masteliavimo galimybės ir tikslinių įrenginių abstrahavimas.

K: Koks yra visų "Microsoft Windows" skirtų programų "What You See Is What You Get" centras?


A: Visų "Microsoft Windows" skirtų programų "Ką matote, tą ir gaunate" pagrindas yra galimybė piešti ant kelių įrenginių, pavyzdžiui, ekrano ir spausdintuvo, ir tikėtis, kad kiekvienu atveju jie bus tinkamai atkurti.

K: Koks yra pagrindinis GDI trūkumas šiuolaikiniuose žaidimuose?


A: Pagrindinis šiuolaikinių žaidimų GDI trūkumas yra tas, kad jis negali tinkamai animuoti, nes neturi sinchronizavimo su kadrų buferiu sąvokos ir jam trūksta rasterizavimo 3D. Šiuolaikiniuose žaidimuose paprastai naudojama "DirectX" arba "OpenGL", kurios programuotojams suteikia galimybę naudotis šiuolaikinės aparatinės įrangos savybėmis.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3