A betűkészletobjektumokat a GDI a szöveges információk megjelenítése során használja. A betűkészleteknek alapvetően két típusa létezik: a fizikai és a logikai betűkészletek.

A fizikai betűkészleteknek alapvetően 4 fajtája létezik. A raszterfontok egy adott betűtípus méret- és eszköz-specifikus adatait tartalmazzák, mégpedig olyan módon, hogy a teljes jelkészletet közvetlenül egy bittérképben tárolják. Az ilyen betűtípussal történő megjelenítés során a GDI egyszerűen a szöveget alkotó jelek bitképeit egymás után közvetlenül az eszközre másolja. A raszterfontok alkalmazásának hátránya, hogy egy adott fonttal csakis egy adott eszközön, és csakis egyetlen méretben érhető el tökéletes kimenet. Amennyiben az alkalmazás a bittérképben tárolt változattól eltérő mérettel, vagy más eszközre rajzol az adott fonttal, úgy a GDI különböző torzítások (nyújtás a koordináta-tengelyek mentén) alkalmazásával próbálja meg a kívánt eredményt elérni. A torzítás során azonban csakis az eredeti méretet a céleszköznek megfelelően tároló bittérképet használhatja fel, ami rendkívül kevés információt hordoz önmagában, és aminek következtében az eredmény minősége meglehetősen kétséges lesz. Az eredtitől jelentős eltérő méretek alkalmazása esetén az írás "recéssé" (nagyítás esetén), vagy a részletek elveszése miatt egybefolyóvá (kicsinyítés esetén) válhat. Ugyancsak hátrány, hogy a raszterfontok a vonal alapú eszközökön (mint pl. a plotter) csak rendkívül ineffektív és komplikált módon jeleníthetőek meg.

A vektorfontok már sokkal alkalmasabbak az ilyen eszközökön történő szövegmegjelenítésre, hiszen ezek az betűkészletet alkotó jeleket egy nagyfelbontású logikai koordinátarendszerben, vonalak sokaságaként ábrázolják. A megjelenítés során a GDI a céleszköz koordinátarendszerébe, az adott eszköz fizikai jellemzőit figyelembe véve képezi le az alakzatot leíró vonalakat, amelyek tényleges megjelenése így a céleszköztől függően változhat. A vektorfontok így gyakorlatilag bármilyen méretben, bármelyik eszközön azonos minőségben jeleníthetőek meg (az eszköz korlátai között), de ez a minőség általában alatta marad a specifikusan az konkrét méretre és eszközhöz készült raszterfontok alkalmazásával elérhetőnek.

A legjobb minőségű íráskép az ún. TrueType betűkészletek alkalmazásával érhető el. A TrueType fontok bittérképek és vonalak helyett görbék sokaságával írják le a betűk körvonalát. Minden egyes írásjel egy vagy több körvonalból (glyph outline) áll. Az alábbi ábra ezt mutatja be:

A TrueType fontok további előnye, hogy arról is információkat tárolnak, hogy az adott jel körvonalait miképpen kell a nagyítások ill. kicsinyítések során torzítani, valamint, hogy milyen szabályok szerint kell eljárni a raszter-alapú eszközre történő leképezés során az optimális íráskép eléréshez. Az alábbi ábra a különböző leképezési, torzítási szabályok alkalmazása során előálló különbséget mutatja be:

A fizikai betűkészletek egy speciális csoportját alkotják az ún. eszközfontok, melyek - mint nevük is mutatja -egy adott eszközhöz kötődnek, csakis azon elérhetőek és teljes egészében az eszköz (és/vagy annak meghajtóprogramja) által kerülnek leképezésre és megjelenítésre.

Az alkalmazások a GDI műveletek során nem közvetlenül fizikai betűkészletekkel, hanem ún. logikai fontokkal dolgoznak. A logikai betűkészlet valójában egy adott betűtípust leíró adatok sokasága egyetlen struktúrába szervezve. A logikai font a következő jellemzőket tárolja: a betűkép (typeface) neve (pl. Times New Roman, Arial, stb.) a betűtípus magasságát, a karakterek átlagos szélességét, a speciális attribútumokat (pl. dőlt, félkövér, aláhúzott, stb.), a betűalkotó vonalak vastagságával egyenes arányban álló ún. súlyát (weight), az alkalmazott betűelrendezést (hogy melyik pozíción melyik írásjelnek megfelelő karakter található), valamint a rajzolás során alkalmazandó precizitási és egyéb leképezési jellemzőket.

A fizikai és a logikai fontok összekapcsolását a GDI betűkészlet-leképezője (font mapper) végzi. Amikor egy alkalmazás egy adott logikai fontot kiválaszt egy eszközkörnyezetbe, akkor a font-leképező megkeresi az adott betűtípusnak és jellemzőknek (méret, attribútumok, stb.) megfelelő betűkészletet. Amennyiben az alkalmazás által kért betűkészlet nem érhető el a futtató rendszeren és/vagy eszközön, úgy a GDI a fent felsorolt adatokhoz legközelebb eső betűkészlet alapján próbálja meg elkészíteni a kért betűtípust. A megfelelő kiindulási betűtípust a logikai fontban megadott és az elérhető fizikai fontok jellemzőinek súlyozott összevetésével állapítja meg. A rendszerben nem kell feltétlenül a betűkészletek összes lehetséges attribútum-kombinációjának megfelelő számú betűtípusnak telepítve lennie, hiszen pl. adott betűtípus félkövér és/vagy dőlt változatait a GDI az alapbetűtípus felhasználásával könnyűszerrel elő tudja állítani. Ugyancsak nem jelent problémát számára, ha a kért betűtípusnak csak egy eltérő méretű változata áll rendelkezésére, hiszen annak kicsinyítésével vagy nagyításával a betűtípus más méretű változatait is elő tudja állítani. A kapott végeredményt azonban nyilvánvalóan erősen befolyásolja a rendszerben telepített és az alkalmazás által használni kívánt betűkészletek egyezősége/hasonlósága, de a GDI minden esetben megpróbálja a lehető legjobb eredményt, az alkalmazás által szándékolthoz legközelebb álló kimenetet a lehető legjobb minőségben produkálni.

Az alkalmazások a szöveget megjelenítése során tetszőleges szögben elforgathatják és/vagy téglalapba tördeltethetik, meghatározhatják igazítását. A programoknak lehetőségük nyílik az összes a rendszerben telepített és az adott eszközkörnyezetben rendelkezésre álló betűtípus és jellemzőik lekérdezésére, amely alapján módosíthatják, a lehetőségek tükrében a konkrét rendszerhez igazíthatják a rajzoláshoz használt logikai fontok jellemzőit. Amennyiben az alkalmazásnak nem felelnek meg a GDI által rendelkezésére bocsátott funkciók, úgy lehetősége nyílik az egyes betűket leíró adatok közvetlen megszerzésére, a szöveg saját rutinokon keresztüli kirajzolására, tetszőleges egyedi transzformációk, effektusok alkalmazására.

A bittérképek
Mint azt az eddigiekben is láthattuk, az általánosságban vett bittérképek rendkívül fontos, mondhatni központi szerepet foglalnak el a grafikus alrendszer működésében. Ez nem is csoda, hiszen a legtöbb megjelenítő eszköz (köztük pl. az elsődleges megjelenítő, a képernyő is) raszter alapúak, ami azt jelenti, hogy a végeredményként létrehozandó ábrát apró pontok sokaságából állítják elő. Ebből már ki is derül, hogy a bittérképek feladata grafikus információk tárolása négyzetrácsba rendezett pontokon, pontosabban azok jellemzőin keresztül.

A GDI alapvetően 2 fajta bittérképet ismer. Az ún. eszközfüggő bittérkép (DDB - Device Dependent Bitmap) a képinformációkat eszköz-specifikusan tárolja, ami azt jelenti, hogy a benne tárolt információk önmagukban nem elégségesek az adott kép bármely más eszközön történő reprodukálására és, hogy ezek az információk nem egységes módon, hanem csakis az eszköz és/vagy az eszközvezérlő által értelmezhető formában kerülnek tárolásra. Ezzel szemben a már korábban említett eszköz-független bittérkép minden, a kép bármely eszközön történő reprodukálásához szükséges információt szabványosított, egységes módon tárol, ezáltal lehetővé téve az adott kép bármilyen eszközkörnyezetben történő reprodukálását.

Azt, hogy a két fajta bittérkép közül a rendszer éppen melyiket használja, mindig az adott feladat dönti el. Az eszközfüggő bittérképek alkalmazása alapvetően rendkívül gyors rajzolást tesz lehetővé, hiszen az információkat az eszköz és/vagy az eszközvezérlő által közvetlenül "emészthető" formában tartalmazza. Ugyanakkor a különböző eszközkörnyezetek közti képátvitelhez a képet az eszközfüggőből először eszköz-független formára kell hozni, hiszen a céleszköz(vezérlő) csakis ezt az információt tudja saját formátumára átalakítani. Szintén eszköz-független formában célszerű a képeket háttértárolókon tárolni illetve másik egységre átküldeni, hiszen csak így garantálható, hogy az majd megjeleníthető lesz a mindenkori feldolgozó egységen is.

Az eszköz-független bittérképben a kép pixelei a pontos megjelenítéshez szükséges színinformációkkal együtt kerülnek eltárolásra. Azt, hogy a színinformációk hogyan kerülnek ábrázolásra a kép színmélysége, azaz az összes lehetséges szín ábrázolásához szükséges bitek száma határozza meg. Amennyiben a kép 1, 2, 4 vagy 8 bit színmélységű, azaz minden képpontja 2, 4, 16 vagy 256 különböző szín bármelyikét veheti fel, úgy az eszköz-független bittérképben a raszter- és a színinformációk szeparáltan kerülnek tárolásra. Ebben a formában az összes a képben előforduló szín egyetlen táblázatban, az ún. bittérkép palettában kerül tárolásra, a kép maga pedig ebbe a táblázatba mutató indexek sorozataként kerül ábrázolásra. A kép megjelenítése során a rendszer sorra veszi a pixeleket reprezentáló paletta-indexeket, majd a megfelelő palette-bejegyzésből kiolvasott RGB (vörös-zöld-kék) komponensek felhasználásával jeleníti meg az adott képpontot a céleszközön.

A 256-nál több színű bittérkép esetén, amelyeknél a kép 15, 16, 24 vagy 32 bit színmélységű, azonban ez már nem lenne effektív tárolási mód. Ennek megfelelően a 32768, 65536, 16milló ill. 2milliárd színű képek esetén az egyes pixelek közvetlenül a színűket leíró RGB komponensek értékeit tartalmazzák, mégpedig a színmélységhez igazodó bitszámon. (15-bit színmélységű képek esetén 5-5-5, 16-bit esetén 5-6-5, míg 24 bit esetén értelemszerűen 8-8-8 biten kerülnek az R-G-B komponensek ábrázolásra. 32-bites színmélység esetén az RGB komponensek szintén 8-8-8 bitet foglalnak el, de a negyedik bájton az adott pixel átlátszóságát leíró, ún. alpha blending érték foglal helyet.)

A bittérkép speciális GDI objektum abból a szempontból, hogy kizárólag memória-eszközkontextusba (memory device context) kerülhet kiválasztásra. A memória-eszközkörnyezet egy olyan speciális eszközkontextus, amely mögött nem áll valódi megjelenítő egység, hanem amely belső rajzolási pufferként szolgál az alkalmazások és a rendszer számára. A memória-eszközkörnyezetbe csakis akkor lehet rajzolni, ha abba előzőleg egy bittérkép objektum kiválasztásra került. Az eszközkörnyezetbe történő rajzolási műveletek valójában a benne kiválasztott bittérképre fognak rajzolni illetve az olvasó műveletek a benne tárolt kép adatait fogják visszaolvasni.

A régiók
Az ún. régiók tetszőleges alakú, de mindenképpen zárt alakzatok, amelyek közvetlenül nem kerülnek megjelenítésre, de amelyek igen fontos funkciót töltenek be: a rajzoló műveletek hatókörét az adott alakzaton belülre korlátozzák. Felhasználásukkal nyílik lehetősége az alkalmazásoknak a téglalaptól eltérő kifestett alakzatok létrehozására, ill. egy adott rajzoló művelet az előre meghatározott határokon túlnyúló (vagy éppen hogy azon belülre eső) részeinek megjelenítésének megakadályozására. A régiók ellipszis, sokszög és téglalap (kerekített ill. szögletes sarkú), valamint ezek tetszőleges számú és sorrendű kombinációjából létrehozható alakokat vehetnek fel. A régiók kombinálásához logikai ÉS, VAGY, KIZÁRÓ VAGY és KÜLÖNBSÉG műveletek alkalmazhatók, amelyeknek köszönhetően gyakorlatilag bármilyen szabad alakzat kialakítható.

A régiók tesztelhetők egyezőségre, invertálhatók, eltolhatók, forgathatók, valamint megállapítható, hogy tartalmaznak -e egy adott koordinátájú pontot és lekérdezhetők a régió minden pontját magába foglaló legkisebb téglalap sarokpontjai.

A régiók alkalmazása jelentős sebességnövekedést von maga után az ablakozás során tipikusan előforduló rajzolási műveletekben, és szabad kezet ad az alkalmazáskészítőknek a felhasználói felületek és grafikus elemek kialakításában is.

(folytatjuk)