|
|
|
|
Példaprogram letöltése
62272 bájt
|
A legtöbb képfeldolgozó programban találunk egy ún. Blur effektet, amivel az adott képet homályosíthatjuk el. Ebben a példában egy olyan függvényt mutatunk be, ami ezt a funkciót valósítja meg úgy, hogy az "elhomályosítás" mértékét is tudjuk változtatni egy paraméteren keresztül.
A függvény paraméterként egy TBitmap típusú objektumot, valamint a homályosítás mértékét várja. A visszatérési értéke egy TBitmap típusú objektum, amiben az elhomályosított kép található.
function Blur(bmp: TBitmap; strength: integer):TBitmap;
Az effekt működési elve nagyon egyszerű. Végigmegyünk egyenként az összes pixelen, és a pixeltől eggyel balra, jobbra, illetve a felette illetve alatta lévő pixelek színét átlagoljuk. Az új képen az adott pixel színe a kapott szín lesz. Ha ezt a műveletet többször egymás után elvégezzük, mindig az eredmény képet felhasználva kiindulásként, akkor egy egyre inkább elhomályosított képet kapunk. Arra kell csupán figyelni, hogy a kép szélein lévő pixelek mellett nem mindenhol vannak további pixelek (például egy bal szélső pixel mellett balra nincs másik pixel), ezért amikor az átlagolt színt kiszámítjuk, ezt figyelembe kell venni.
A függvény részletes leírása a következő: A paraméterként megkapott TBitmap objektumot átmásoljuk két új objektumba. Az egyik az inbmp, amit alapul veszünk az új kép készítésekor, a másik pedig az outbmp, amiben a végeredményt kapjuk meg. Egy ciklust indítunk, ami annyiszor fut le, amennyit a strength paraméterben megadtunk. Ha 0-t adunk meg, akkor is legalább egyszer. Ebben két további, egymásba ágyazott ciklus található. A külső ciklus az y koordinátákon halad végig, és egy-egy változóba eltárolja az aktuális sor előtti (l1), az aktuális sor (l2), és az az utáni sor (l3) kezdőcímét a forrás képből, valamint az aktuális sor kezdőcímét a cél képből (l). Ehhez a Scanline függvényt használja fel, ami sokkal gyorsabb pixel elérést tesz lehetővé, mint a TCanvas Pixels property-je.
A belső ciklus az x koordinátákon halad végig, és az aktuális pixel szomszédos színeiből előállítja az átlagos színt, amihez egy saját belső függvényt használ (AddColorToAvg) fel. Ez a függvény számolja, hogy hány szín, és milyen színek lettek megadva, és így pontosan ki lehet számolni a színek átlagát. Az új képen az aktuális pixel színe az így kiszámított szín lesz. Az eredeti kép aktuális pozíciójában lévő pixel színét nem vesszük figyelembe, az majd úgyis részt vesz a szomszédos pixelek színének megállapításakor. Amikor elkészült az új kép, akkor átmásoljuk azt az inbmp objektumba, hogy ha további lépések következnek, akkor már ez legyen a kiinduló kép. A függvény visszatérési értéke az outbmp lesz.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 461. 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!
|