C# - GDI+ lehetőségei

forráskód letöltése
A GDI+ számtalan új lehetőséget biztosít különféle grafikák, a 2D-s megjelenítés terén. Mostani cikkünkben azt vizsgáljuk, hogy miként helyezhetünk el ablakunk hátterén egy tetszőleges színátmenetet.
A megoldáshoz egyszerűen egy téglalapot rajzolunk ki akkora méretben az ablakunkra, mely teljesen lefedi azt. A kirajzoláshoz speciális ecsetet használunk, melynek hatására a színátmenet megvalósul.
A kirajzolást akkor kell elvégeznünk, amikor az ablakunk hátterét újra kell rajzolni. Ekkor jön létre a Form Paint nevű eseménye. Ehhez létrehozunk egy új eseménykezelő függvényt úgy, hogy a Tulajdonság (Properties) lapon az események (Events) gombra kattintunk, amikor a Form1 a kijelölt. Ekkor láthatóvá válnak a Form eseményei, amelyek között nekünk most a Paint nevűre kell duplán kattintani. Ekkor létrejön az eseménykezelő függvény, ahová már csak a szükséges kódot kell elhelyeznünk.
Itt első lépésként létrehozunk egy Graphics típusú változót a rajzolás elvégzéséhez. Ezt az osztályt a paraméterként kapott PaintEventArgs-ból vehetjük. Szükségünk lesz még arra az információra is, hogy mekkora aktuálisan a Form mérete. Ezt a Form ClientRectangle property-ből tudhatjuk meg, Rect típusban. Ezt követően létrehozzuk a speciális ecsetet, mely a színátmenet kirajzolását végzi. Ehhez egy LinearGradientBrush osztályra van szükségünk. Itt létrehozáskor az első paraméterben a kirajzolandó téglalap méretét kell megadnunk Rect típusban. A következő két paraméterben azt a két színt adhatjuk meg, mely között a színátmenetet ki kell rajzolnunk. Végül már csak arról kell rendelkeznünk, hogy milyen irányban történjen meg a színátmenet kirajzolása. Erre az alábbiak egyikét választhatjuk:
  • BackwardDiagonal – jobb felső saroktól a bal alsó irányában
  • ForwardDiagonal – bal felső saroktól a jobb alsó irányában
  • Horizontal – balról jobbra
  • Vertical – fentről le
Utolsó lépésként már csak annyi a teendőnk, hogy a Graphics osztály FillRectangle függvényével a téglalapot kirajzoljuk a létrehozott ecsettel és a szükséges méretben.
      protected void Form1_Paint (object sender, System.WinForms.PaintEventArgs e)
      {
        Graphics g = e.Graphics; 
        Rectangle rect = this.ClientRectangle;    
        LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow, LinearGradientMode.Vertical); 
        g.FillRectangle(lBrush, rect); 
      }