Delphi - Képek torzítása, színek keverése

GDI 3. rész

forráskód letöltése

A cikksorozat soron következő részében megnézzük, hogy hogyan tudunk egy tetszőleges képet egy általunk meghatározott paralelogramma alakzatban megjeleníteni, valamint az összes eddig nem tárgyalt, a TRect típussal kapcsolatos függvényt. Mindenekelőtt a PatBlt függvényt tárgyaljuk meg, aminek tulajdonképpen a jelentősége nem túl nagy, de bizonyos esetekben jól használható.
A függvénynek a következő paraméterei vannak:
DC: a cél bitkép Canvas-ának azonosítója (pl. Image1.Canvas.Handle).
X, Y: a célterület X és Y koordinátái.
Width, Height: a célterület szélessége és magassága.
Rop: annak a logikai műveletnek kódja, amit a célterület pixeleivel el kell végezni. Ezek a következők lehetnek:
  • PATCOPY: a beállított mintát másolja a célterületre.
  • PATINVERT: a minta és a célterület pixelei között XOR műveletet végez.
  • DSTINVERT: invertálja a célterületet.
  • BLACKNESS: a célterület pixelei fekete színűek lesznek.
  • WHITENESS: a célterület pixelei fehér színűek lesznek.

A bevezetőben említettük, hogy lehetőségünk van egy tetszőleges bitképet paralelogramma alakzatban megjeleníteni. A függvény, amivel ezt megtehetjük a PlgBlt, sajnos ez csak Windows NT operációs rendszer esetén használható.
A függvény paraméterei a következők:
  • hdcDest: a cél bitmap Canvas-ának azonosítója.
  • lpPoint: egy TPoint tömb, amelynek három eleme lehet. A három pont egy háromszöget határoz meg. A háromszög három pontja a kép egy-egy sarkához tartozik. Az első elem a bal-felső sarokhoz, a második a jobb-felsőhöz, és a harmadik a bal-alsóhoz. A negyedik pont, ami a kép jobb-alsó sarkát határozza meg, az előbbi háromból adódik.
  • hdcSrc: a forráskép azonosítója.
  • nXSrc: a forrásterület X koordinátája.
  • nYSrc: a forrásterület Y koordinátája.
  • nWidth: a forrásterület szélessége.
  • nHeight: a forrásterület magassága.
  • hbmMask: megadhatunk egy maszk bitképet is, aminek az azonosítója ez a paraméter. Ha nem használunk maszkot, akkor az értéke 0.
  • xMask: a maszk X koordinátája.
  • yMask: a maszk Y koordinátája.

A TRect típussal már sokszor találkozhattunk, így most már itt az ideje, hogy megnézzük, milyen függvények állnak a rendelkezésünkre a TRect struktúrában tárolt adatok manipulálására. A TRect struktúrát általában egy terület koordinátáinak tárolására használjuk, ezért ezentúl úgy hivatkozunk rá, hogy „terület”.

CopyRect
Az első paraméterben megadott területbe átmásolja a második paraméterként megadott területet. A visszatérési értéke igaz, ha a művelet sikerült, ebben az esetben a két terület adatai megegyeznek.

EqualRect
Összehasonlítja a paraméterként megadott két területet, és ha megegyeznek, akkor igaz értékkel tér vissza.

InflateRect
Akkor használhatjuk, ha a területet növelni, vagy csökkenteni szeretnénk. A második paraméter vízszintes irányban, a harmadik paraméter pedig függőleges irányban módosítja a terület méretét. Negatív érték esetén csökkentés, pozitív esetén pedig növelés történik. Az értékek hozzáadódnak a Left és Right, valamint a Top és Bottom mezőkhöz egyaránt.

IntersectRect
Kiszámolja második és harmadik paraméterként megadott két terület közös részének koordinátáit, és bemásolja az első paraméterként megadott struktúrába. Ha a két területnek nincs közös része, akkor a visszatérési értéke hamis, és a struktúra minden mezőjének értéke 0.

IsRectEmpty
Ha a paraméterként megadott terület egy üres terület, akkor igaz értékkel tér vissza. Egy terület akkor számít üres területnek, ha a jobb szélének koordinátája (Right) egyenlő, vagy kisebb a bal szélének koordinátájánál (Left), és/vagy az alsó szélének koordinátája (Bottom) kisebb, vagy egyenlő a felső szélének koordinátájánál (Top).

SetRect
A paraméterként megadott terület koordinátáit a szintén paraméterként megadott értékekre állítja be. Az első paraméter a terület struktúrája, a második a bal, a harmadik a felső, a negyedik a jobb, és az ötödik az alsó szélek koordinátája.

SetRectEmpty
A paraméterként megadott struktúrában egy üres területet ad vissza.

SubtractRect
A második és harmadik paraméterben megadott területet kivonja egymásból, és az első paraméterben megadott struktúrába másolja. A két területet csak akkor tudja egymásból kivonni, ha a vízszintes, vagy a függőleges koordinátáik egyenlők.

UnionRect
Kiszámolja azt a legkisebb területet, amibe a második és harmadik paraméterként megadott terület belefér, és a koordinátáit eltárolja az első paraméterként megadott struktúrába.


GDI cikksorozat