
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.