GDI+ ist die logische Weiterentwicklung von GDI. Zugang zu GDI+ aus dem Quellcode bekommen Sie wenn Sie den System.Drawing Namespace importieren. Dieser Namespace bietet Zugriff auf die basic GDI+ Graphik Funktionen. Mehr erweiterte Funktionalität wird durch die System.Drawing.Drawing2D, System.Drawing.Imaging, und System.Drawing.Text Namespaces geboten.
Die Graphics Klasse bietet Methoden um auf auf das Display Gerät zu zeichnen. Klassen wie Rectangle und Point enhtalten GDI+ primitives. Die Pen Klasse wird benuützt um Linien und Kurven zu zeichnen, während Klassen die von der abstrakten Klasse Brush abgeleitet werden, benutzt werden um Füllungen für Umrisse zu erzeugen.
In unserem Beispiel werden wir ein gefülltes Kuchendiagramm erzeugen.
Als erstes wird ein neues Bitmap (Objekt) mit 300x250 Pixel und 32 bit Farbtiefe erzeugt, welches wir dann im weiteren Verlauf mit verschiedenen GDI+ Objekten füllen werden. Dieses Bitmap wird als neues Graphics Objekt übergeben und mit einem rechteckigen weissen Hintergrund gefüllt.
Bitmap newBitmap = null; Graphics g = null ; try { Font fontCounter = new Font("Verdana", 8); newBitmap = new Bitmap(300,250,PixelFormat.Format32bppARGB); g = Graphics.FromImage(newBitmap); g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0,0,300,250)); |
Als nächstes wird ein Pen Objekt erzeugt und einiege Einstellungen getroffen wie die Stärke, die Art und die Farbe der Linie.
Pen penPie = new Pen(Color.DarkOrange, 1); penPie.DashStyle = DashStyle.Solid; penPie.StartCap = LineCap.DiamondAnchor; penPie.EndCap = LineCap.Flat; |
Als nächstes wird mit der Grahics Mehtode DrawPie ein Kuchenstück mit dem Pen Objekt gezeichnet. Nach Angabe des Pen's werden Float Zahlen Werte für die Positionierung des Teil-Küchenstückes sowie für Start und End Punkte des Winkels des Kuchenstückes angegeben.
g.DrawPie(penPie, 55, 25, 200, 200, 0, 90); g.DrawPie(penPie, 55, 25, 200, 200, 90, 220); g.DrawPie(penPie, 55, 25, 200, 200, 220, 280); g.DrawPie(penPie, 55, 25, 200, 200, 280, 330); g.DrawPie(penPie, 55, 25, 200, 200, 330, 360); |
In meinem Beispiel wiederhole ich das Spielchen noch ein paar mal um einen Vollständigen Kreis zu erzeugen. Natürlich können Sie hier auch dynamisch erzeugte Werte für die Teil Kuchenstücke generieren. Zu guter letzt werden die Teil Stücke des Kuchens mit der Methode FillPie mit Farben Bunt gefüllt. Dabei ist noch zu erwähnen das die FillPie Methode einen Parameter Brush (Pinsel) sowie weitere Paramter um die Positionierung des Pie Stückes anzugeben, erwartet.
g.FillPie(new SolidBrush(Color.Yellow), 55, 25, 200, 200, 0, 90); g.FillPie(new SolidBrush(Color.Red), 55, 25, 200, 200, 90, 130); g.FillPie(new SolidBrush(Color.SteelBlue), 55,25,200,200,220,60); g.FillPie(new SolidBrush(Color.DarkGreen), 55, 25, 200,200,280,50); g.FillPie(new SolidBrush(Color.Orange), 55, 25, 200,200,330, 30); |
Um meinen Teil des Kuchens zu markieren zeichne ich noch einen "String" in das Bild:
g.DrawString ("Mein Teil des Kuchens", fontCounter, new SolidBrush(Color.Black), 15,120); |
Das wärs eigentlich schon. Ich habe an dieser Stelle aber noch eine Ausgabe des Bildes in einem Memory Stream gemacht, da ich das Bild in einer anderen ASPX Seite aufrufe und ausgeben lasse.