HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Image komponens csíkozott képpel


Példaprogram letöltése

281259 bájt

Érdekes, és mostanában elég gyakran alkalmazott effekt képeken a kép minden második sorának valamilyen arányban történő sötétítése. A reklámképektől kezdve az animációkon keresztül sok helyen találkozhatunk ilyen képekkel, ezért úgy gondoltuk, hogy az Image komponens módosításával mi is előállítunk ilyet. Az új komponensben az effekt tulajdonságait property-ken keresztül szabályozhatjuk, így a csíkozás módját széles skálán variálhatjuk.

A mellékelt példaprogram megnyitása előtt az InterlacedImage.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Az új komponenst az TImage osztályból származtatjuk, ezt egészítjük ki új property-kkel és metódusokkal. Az új komponens tehát minden olyan tulajdonsággal rendelkezni fog mint az Image komponens, de ezen kívül a képet meg tudja jeleníteni a csíkozás effekttel.
A csíkozás tulajdonságait két property-vel szabályozhatjuk. Az egyik a Darken, ami azt mondja meg, hogy a sorokat milyen százalékban kell sötétíteni. Ha 100-nál nagyobb értéket adunk meg, akkor nem sötétítetni, hanem világosítani fogja a sorokat. 0 értéknél a sötétített sorok feketék lesznek.
A másik property a LineSize, amellyel a sötét és világos (normál) sávok magasságát adhatjuk meg pixelben. A legkisebb használható érték az 1, a maximális érték viszont nincs korlátozva.
A Picture property-ben adhatjuk meg a képet. Az új Picture property felülírása mindenképpen szükséges, mert mielőtt a képet megjelenítenénk, el kell végezni rajta a változtatásokat. Az eredetileg megadott képre is szükség lesz, ezért létre kell hoznunk egy TPicture típusú objektumot, ami ezt tartalmazza. Amikor a Picture property értéket kap, akkor meghívjuk a MakeInterlace eljárást. Ez az eljárás először is átadja a képet a TImage osztály-ban található Picture property-nek, majd elvégzi rajta a módosításokat. A komponens az ebben a property-ben tárolt képet jeleníti meg, nem pedig az általunk létrehozott Picture property-ben lévő képet.
A kép pixeleinek sötétítéséhez szükség van a pixelek gyors elérésére, ehhez viszont létre kell hoznunk két típust:
type
  TRGBArray=array[0..4096] of TRGBTriple;
  PRGBArray=^TRGBArray;
A MakeInterlace eljárásban végigmegyünk a kép sorain. Az ls változó egy számláló lesz, ami arra szolgál, hogy megmutassa, hogy az adott sávban hány pixelnyi sor van még hátra. Ha a változó értéke 0, akkor a d logikai változó értékét az ellentettjére változtatjuk, és az ls változónak átadjuk az LineSize property értékét. Ha a d változó értéke igaz, akkor az adott sort el kell sötétíteni a Darken property-ben megadott mértékben. Ehhez lekérdezzük az adott sor címét a ScanLine függvénnyel egy PRGBArray típusú változóba. Ezután egy belső ciklust indítunk, amely az adott sor pixeleit olvassa be sorban (x). A ciklusváltozó egyben egy index is lesz, amivel az adott pixel címét, illetve a színét meghatározó értékeket fogjuk elérni. l:=Bitmap.ScanLine[y];
  for x:=0 to Width-1 do begin
    l[x].rgbtRed:=Min(Round(l[x].rgbtRed*FDarken/100), 255);
    l[x].rgbtGreen:=Min(Round(l[x].rgbtGreen*FDarken/100), 255);
    l[x].rgbtBlue:=Min(Round(l[x].rgbtBlue*FDarken/100), 255);
  end;
Az rgbtRed a piros, az rgbtGreen a zöld, az rgbtBlue pedig a kék színösszetevő értékét tartalmazza. Ennek kiszámoljuk a Darken property-ben megadott százalékát, és ezt írjuk vissza. Mivel a Darken property-ben megadható 100-nál nagyobb szám is, ezért arra is figyelnünk kell, hogy az eredmény ne legyen nagyobb 255-nél, az egyes színösszetevők maximális értékénél. Erre szolgál a Max függvény. A ciklusok után már előáll a csíkozott kép, így már csak meg kell hívnunk az Invalidate eljárást, ami frissíti a komponens képét.

Cikksorozat

#IDKategóriaCikk címeSorozat
1018DelphiVonalkód készítő komponens1. rész
1028DelphiVonalkód nyomtatása a QuickReport-al2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 66. 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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |