|
|
Tetszőleges alakú kép kirajzolása árnyékkal
|
|
Példaprogram letöltése
88221 bájt
|
Grafikai programokban gyakran találkozhatunk az árnyék effekttel. Most egy olyan eljárást készítünk, amely egy tetszőleges alakú képet (átlátszó háttérszínű) rajzol meg úgy, hogy az árnyék több tulajdonságát is megadhatjuk: távolság, intenzitás, elmosódottság.
A példaprogramba tetszőleges képet betölthetünk, az átlátszó szín a bal alsó pixel színe lesz. A betöltött képet az egérrel mozgathatjuk a háttérképen.
Az eljárás deklarációja a következőképpen néz ki:
procedure DropShadowPic(Picture: TBitmap; Dest: HDC; X, Y: integer; TranspColor: TColor; XOffs,
YOffs: integer; Intensity: byte; Blur: integer);
A Picture paraméterben kell megadni a kép objektumát. A Dest paraméter a cél Canvas azonosítója (Handle). Az X és Y a kép bal felső sarkának pozíciója, az XOffs és YOffs pedig az árnyék eltolásának mértéke X és Y irányban. Az XOffs és YOffs paraméterek értéke lehet negatív is. A TranspColor paraméterben adhatjuk meg azt a színt, ami a képen az átlátszó szín lesz. Az Intensity az árnyék intenzitása, erőssége. A legmagasabb érték (255) fekete, míg a legkisebb (0) teljesen átlátszó árnyékot eredményez. A Blur paraméter az árnyék elmosása. Az elmosás mértéke a paraméter értékével egyenes arányban nő. A legkisebb érték mellett (0) az árnyék nem lesz elmosva.
Az eljárásban először is előállítunk egy maszkot. A maszk mérete 2-2 pixellel szélesebb illetve magasabb, mint a kép. Ennek az árnyék elmosásánál lesz jelentősége. A maszkban a kép minden egyes pixeljéhez egy bájt tartozik. Ha a pixel színe háttérszínű (TranspColor), akkor a bájt értéke 255, egyébként pedig az intenzitás 255-ből levont értéke. Ha tehát az intenzitás 255, akkor a bájt értéke 0 lesz.
Miután elkészítettük ezt a maszkot, az ebben tárolt értékeket összemossuk. Ez úgy történik, hogy minden pixel intenzitását a szomszédos pixelek intenzitásának átlagára állítjuk be. Ezt annyiszor végezzük el, amennyi a Blur paraméter értéke.
A maszkot a háttérkép pixeleinek manipulálásához használjuk fel. Ahol a maszkban található bájt értéke 255, ott az eredeti szín marad meg, ahol pedig 0, ott csak az árnyék színe lesz látható. Ha a bájt értéke 128, akkor a pixel színe 50%-kal lesz sötétítve. Nyilván, ha az intenzitás értéke csak 64, akkor a sötétítés maximális értéke csak 25% lehet.
Létrehozunk egy TBitmap típusú objektumot, amire átmásoljuk a háttérkép azon részét, amelyre az árnyék kerül. Egy ciklusban ennek a területnek a pixeleit a maszkban tárolt értékek alapján a megfelelő mértékben elsötétítjük, majd a kapott képet visszamásoljuk a háttérképre. Ezután már csak ki kell rajzolnunk a képet a TransparentBlt függvénnyel a megadott pozícióba.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 560. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|