Elsőként valósítsuk meg az árnyék létrehozását.
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
...
Mind a két esetben egy olyan GIF képet használunk fel, melyben adott egy szín ahol átlátszó a kép. Az árnyéknak így a kép szélein kell megjelennie.
Bitmap bmp = new Bitmap(Application.StartupPath+"\\1.gif");
Létrehozunk egy ImageAttributes osztályt, melynek SetColorMatrix függvényével állítjuk be az új mátrix tulajdonságokat, amit fel kell használni a képhez.
ImageAttributes ia = new ImageAttributes();
ColorMatrix cm = new ColorMatrix();
Árnyék létrehozásához az alábbi értékek megadása szükséges. A Matrix33 property-ben megadott szám mértékében lesz látható az árnyék.
cm.Matrix00 = 0;
cm.Matrix11 = 0;
cm.Matrix22 = 0;
cm.Matrix33 = (float)trackBar1.Value/10;
ia.SetColorMatrix(cm);
Ezt követően már csak ki kell rajzolnunk úgy a képet, hogy felhasználjuk az ImageAttributes osztályt.
g.DrawImage(bmp, new Rectangle(10+trackBar2.Value, 10+trackBar2.Value, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, ia);
Ezt követően kirajzoljuk az eredeti képet is, rá az árnyékra.
e.Graphics.DrawImage(bmp, 10, 10);
Az átlátszóság szabályozása hasonlóan történik, mint az árnyék képzése. Az alábbi adatok segítségével azt szabályozhatjuk, hogy a kirajzolásra kerülő kép milyen mértékben lehet áttetsző. Ennek pontos mértékét szintén a Matrix33 property értéke adja.
ImageAttributes ia2 = new ImageAttributes();
ColorMatrix cm2 = new ColorMatrix();
cm2.Matrix00 = 1;
cm2.Matrix11 = 1;
cm2.Matrix22 = 1;
cm2.Matrix33 = (float)trackBar3.Value/10;
ia2.SetColorMatrix(cm2);
g.DrawImage(bmp, new Rectangle(220, 10, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, ia2);
}