HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Random képkeret


Példaprogram letöltése

41770 bájt

Ha már unja, hogy egy kép csak téglalap alakú lehet, akkor itt az ideje egy olyan kontrol elkészítésének, melynél a kép szélét egy véletlenszerű vonal vágja le. A kontrolt úgy valósítjuk meg, hogy a levágott széle a képnek teljesen áttetsző legyen.

A mellékelt példa használatához szükség lesz a ZigZagPictureControl.dll-ben lévő ZigZagPicture kontrolra.
Az új kontrol az alábbi tulajdonságokkal rendelkezik:
Image
Osztály: ZigZagPictureControl.ZigZagPicture
public Image Image {get; set;}
A megjelenítendő képet tölthetjük be az Image property-n keresztül.
Wave
Osztály: ZigZagPictureControl.ZigZagPicture
public int Wave {get; set;}
A Wave property-be írt szám határozza meg a kép szélét levágó egyenes maximális kilengését. Minél nagyobb számot adunk itt meg, annál nagyobb lesz a vonal töredezettsége.
MaxStep
Osztály: ZigZagPictureControl.ZigZagPicture
public int MaxStep {get; set;}
A levágás egy oldalán hozott szakaszok maximális száma. Minél nagyobb számot adunk itt meg, annál egyenletesebb lesz a körvonal.
GenerateClip
Osztály: ZigZagPictureControl.ZigZagPicture
public void GenerateClip();
A megadott értékekkel egy új körvonalat generálhatunk. Ez automatikusan meghívásra kerül, amint a property-k valamelyike megváltozik. Mivel a körvonal generálásánál véletlenszerű számok is közreműködnek, így azonos property értékek mellett sem kapunk két egyforma körvonalat.
A megvalósítás lényege a GenerateClip függvényben történik. A trükk abból áll, hogy egy új körvonalat hozunk létre, mely ilyen szaggatottá teszi a kép szélét és ezt adjuk értékül a kontrol régiójának, így e régiónk kívül eső rész nem lesz látható, mivel az a továbbiakban már nem képezi a kontrol részét. Ezért van az is, hogy e levágott rész teljesen átlátszó.
A régió cseréje egyszerűen történik.
      this.Region = new Region(gp);      
Az új régiót egy GraphicsPath-ból állítjuk elő. Ebbe vonalakat veszünk fel, melyek meghatározzák az új körvonalat.
      gp.AddLine(x1, y1, x2, y2);
Ezeket a rövid szakaszokat négy while ciklus számítja ki, a megadott property-k értékének megfelelően, véletlenszerű számok felhasználásával. Mindegyik ciklus a téglalap egy-egy oldalán megy végig. Az egymás után létrehozott vonalak egy zárt alakzatot hoznak létre a négy ciklus végére. E zárt alakzat adja a kép új széleit.

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