HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Több képet tartalmazó bittérkép felhasználása


Példaprogram letöltése

14361 bájt

A .NET Framework ImageList osztályának segítségével nemcsak több képet tárolhatunk egy objektumban, de egy több-képes állományt is képesek vagyunk feldogozni, és a kép-lista kollekciójában egységenként kezelni. Ezt követően már indexszel hivatkozhatunk az egyes képekre. Cikkünkben ezt a lehetőséget ismerhetjük meg egy példán keresztül, ahol egy „legördülő” dialógusablakban jelennek meg a kép alkotói.

A példában a VÁLASZTÓABLAK feliratú nyomógombra kell kattintanunk, hogy „legördüljön” egy új dialógusablak, és ki tudjuk választani az ablakban megjelent 4 darab kép egyikét, melyek eredetileg a projekt mappájában található imagelist.bmp állomány részei. A választott kép pedig kirajzolódik a PictureBox kontrolban.
A legördülő ablak egy Form2 típusú objektum, melynek speciális beállításaival érhető el, hogy csak a négy kép méretével megegyező nagyságú terület legyen látható. A kezdeti értékek kirajzolása az Init metódusban történik, többek közt itt rajzoljuk ki a képeket a felületre.
A Show metódusban végezzük el a megjelenítést, a paraméterként kapott koordinátájú pontban.
public void Show(int x, int y)
{
  this.Left = x;
  this.Top = y;
  base.Show();
}
Az ESC billentyű lenyomásával, vagy más objektumra fókuszálva érhető el, hogy az ablak bezáródjon.
Az egér mozgatását kísérendő megváltoztatjuk az adott koordinátában található kép háttérszínét. Ezt az OnMouseMove metódusban végezzük el. Ha valamely kép fölött felengedjük a lenyomott egérgombot, akkor a kép megjelenik a PictureBox kontrolban.
Ekkor kiszámoljuk a kép sorszámát.
...
int image = coordY * columns + coordX;
Egy DataObject objektumban eltároljuk az ImageList komponens adott indexszel rendelkező képét.
DataObject d = new DataObject();
d.SetData(DataFormats.Text,image.ToString());
d.SetData(DataFormats.Bitmap,iList.Images[image]);
Majd amikor felengedjük a gombot, „elsütjük” a deklarált, ClickItemEventHandler típusú eseményt - ahol a kezelőfüggvény második paramétere hordozza a kép indexét - és elrejtjük a dialógusablakot.
if (ClickItem != null && imageId >=0 && imageId < iList.Images.Count)
{
  ClickItem(this, imageId);
  Hide();
}
Az alkalmazás főablakában induláskor fel kell töltenünk az ImageList komponenst „képekkel”. Egy fontos dologra kell odafigyelni: a forrás képnek a projekt részét kell képeznie, vagyis erőforrásként a projekthez kell adni, valamint hogy a kép szélessége egész szám szorosa legyen az ImageList komponensben megadott képszélességnek.
imageList1.ImageSize=new Size(32,32);
imageList1.ColorDepth = ColorDepth.Depth24Bit;
A megadott képméret 32 pixel, a forrásként használt bittérkép pedig 4*32, vagyis 128 pixel széles. Az ImageList osztály AddStrip metódusával bontjuk fel a képet részképekre, és fűzzük fel őket a listába.
imageList1.Images.AddStrip(new Bitmap(GetType(),"imagelist.bmp"));
...
A képekkel feltöltött ImageList objektumot átadjuk a Form2 objektum Init metódusának, majd létrehozunk egy kezelőmetódust a képre történő kattintáshoz.
f = new Form2();
f.Init(imageList1);
f.ClickItem += new Form2.ClickItemEventHandler(OnItemClicked);
Amikor a nyomógombra kattintunk, meghatározzuk a gomb helyzetét, majd a kapott koordinátát leképezzük a képernyő méreteire. Ezeket a koordinátákat adjuk át a Show metódusának.
Point pt = PointToScreen(new Point(button2.Left, button2.Bottom));
f.Show(pt.X,pt.Y);
A dialógusablak magasságát nulla értékre állítjuk.
f.Height = 0;
Majd elindítjuk az időzítőt.
timer1.Enabled = true;
timer1.Start();
Az időzítő pedig addig növeli a magasságot, amíg az el nem éri a teljes terjedelmet.
f.Height += 1;
A képek kiválasztásakor fut le a ClickItem esemény, melynek kezelőjében kiválasztjuk a választott sorszámú képet a listából.
pictureBox1.Image = imageList1.Images[item];

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