C# - Pen osztály lehetőségei grafika készítésekor

forráskód letöltése
Grafikai objektumok kirajzolásánál a rajzoláshoz használt „ceruza” adatait (szín, átlátszóság, vonal vastagság, stílus, stb.) a Pen osztályon keresztül szabályozhatjuk. Ha részletesen megismerjük a Pen osztályt, akkor igen látványos, érdekes grafikákat készíthetünk egyszerűen.
Mostani példánkban a kirajzolást úgy végezzük el, hogy a Form Paint eseményénél kirajzolunk egy Bezier görbét, melynek egy végpontja egy fix koordináta, a másikat viszont az egér aktuális pozíciója adja. A görbe rajzolásához szükséges Pen osztálynál a színt, átlátszóságot, a vonal stílusát a Form-on elhelyezett TrackBar és ListBox komponensekkel szabályozhatjuk.
     protected void Form1_Paint (object sender, System.WinForms.PaintEventArgs e)
      {
        Graphics g = e.Graphics;
A Pen osztály létrehozásakor, annak konstruktorában első paraméterként adjuk meg, hogy milyen színű legyen a kirajzolt görbénk. A szín átlátszóságának mértékét a trackBar1 aktuális értéke szolgáltatja, a szín megállapításához a következő három TrackBar értékét használjuk fel és ebből származtatunk egy RGB értéket. A konstruktor második paramétere lesz a vonal vastagsága, melyet a trackBar5 ad.
Pen p = new Pen(Color.FromArgb(trackBar1.Value, trackBar2.Value, trackBar3.Value, trackBar4.Value), trackBar5.Value);
Lehetőség van nem csak folytonos vonal, hanem különféle szaggatott, pontozott vonalak rajzolására is. Ezek lehetséges értékeit már felsoroltuk a listBox1-ben, így a választáskor, a DashStyle property-nek történő értékadáskor az szükséges értéket innen vehetjük.
        p.DashStyle = (DashStyle)listBox1.SelectedIndex;
Azt is szabályozhatjuk, hogy a vonal egy-egy vége miképp legyen lezárva. A lehetséges értékeket a listBox2-ben soroltuk fel. A Pen StartCap property-ben állíthatjuk be, hogy miként kezdődjön a vonal, míg az EndCap property-ben, hogy hogyan fejeződjön be.
        p.StartCap = (LineCap)listBox2.SelectedIndex;
        p.EndCap = (LineCap)listBox2.SelectedIndex;        
Végül már csak a görbe kirajzolása marad, melyhez a DrawBezier-t használhatjuk, ahol első paraméterként meg kell adni a létrehozott és beállított Pen osztály példányát.
        g.DrawBezier(p, new Point(800, 100), new Point(400, 100), new Point(100, 400), new Point(FX, FY));
      }
A vonal színét természetesen nem csak konstruktorban lehet megadni, miként annak vastagságát sem. A szín megadására a Color property, míg a vastagságra a Width property szolgál.
A Pen property Brush property-jében egy tetszőleges ecset objektum is megadható. Ezzel a vonal színét, egyéb tulajdonságát úgy tudjuk szabályozni, hogy a vonal rajza a megadott ecsettel lesz kitöltve és nem a Color property-jében megadott színnel.
      if (checkBox1.Checked)
      {
        p.Brush = new LinearGradientBrush(this.ClientRectangle, Color.Blue, Color.Yellow, -45);
      }