GDI+ – Grafikgeräteschnittstelle der nächsten Generation
Alle Anwendungen der grafischen Benutzeroberfläche (GUI) interagieren mit Hardwaregeräten (Monitore, Drucker, Scanner), die als lesbare Daten dargestellt werden können. Allerdings kommuniziert die Anwendung nicht direkt mit dem Gerät, da sonst für jedes Gerät ein anderer Benutzeroberflächencode geschrieben werden muss. Um diese Doppelarbeit zu vermeiden, können wir eine dritte Komponente zwischen der Anwendung und dem Gerät verwenden. Diese Komponente konvertiert und überträgt die an das Gerät gesendeten Daten und die vom Gerät an das Programm gesendeten Daten. Und diese Komponente ist GDI+. GDI+ ist der Zugang zur Interaktion mit Grafikgeräten im .NET Framework. GDI+ ist eine Reihe von C++-Klassen, die sich in einer Klassenbibliothek namens Gdiplus.dll befinden. Gdiplus.dll ist eine integrierte Komponente in den Betriebssystemen Windows XP und Windows Server 2003. Okay, ich werde hier nicht viel Zeit damit verschwenden, über akademische Dinge zu sprechen. Lassen Sie uns GDI+ verwenden, um ein Bild in Web Form zu zeichnen.
Sie müssen solche Bilder gesehen haben. Dieses Bild ist natürlich nicht Standard. Wenn Sie interessiert sind, können Sie es ausprobieren.
Namespace Sky_MsdnDataGrid
{
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
Verwenden von System.Data;
Verwenden von System.Drawing;
mit System.Drawing.Imaging;
mit System.Web;
using System.Web.SessionState;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.HtmlControls;
/// <Zusammenfassung>
/// Zusammenfassende Beschreibung von AspxChart.
/// </summary>
öffentliche Klasse AspxChart: System.Web.UI.Page
{
private Bitmap-Bitmap;
private Grafiken; Grafiken;
private int[] arrValues;
private string[] arrValueNames;
private void Page_Load(object sender, System.EventArgs e)
{
arrValues = new int[6];
arrValueNames = neuer String[6];
arrValues[0] = 100;
arrValues[1] = 135;
arrValues[2] = 115;
arrValues[3] = 125;
arrValues[4] = 75;
arrValues[5] = 120;
arrValueNames[0] = "Januar";
arrValueNames[1] = "Februar";
arrValueNames[2] = "März";
arrValueNames[3] = "April";
arrValueNames[4] = "Mai";
arrValueNames[5] = "Juni";
this.Init_Bitmap();
this.Draw_Rectangle();
this.Draw_Pie();
//Speichern Sie das gezeichnete Bild im GIF-Format im Ausgabestream der aktuellen Seitenantwort
bitmap.Save(this.Response.OutputStream,ImageFormat.Gif);
}
/// <Zusammenfassung>
/// Erste Aktionen auf der zu zeichnenden Bitmap ausführen (kann man sich als Leinwand vorstellen)
/// </summary>
private void Init_Bitmap()
{
bitmap = neue Bitmap(400,200);
Graphics = Graphics.FromImage(bitmap);
Graphics.Clear(Color.White);
Graphics.DrawString("Umsatz des Unternehmens
}
#region Von Web Form-Designtools generierter Code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: Dies ist ein Aufruf, der vom ASP.NET Web Form-Designtool benötigt wird.
//
InitializeComponent();
base.OnInit(e);
}
/// <Zusammenfassung>
/// Diese Methode ist für die Unterstützung von Designtools erforderlich. Verwenden Sie keinen Code-Editor, um sie zu ändern
/// Der Inhalt dieser Methode.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <Zusammenfassung>
/// Zeichne ein Rechteck auf die Leinwand
/// </summary>
private void Draw_Rectangle()
{
int i;
PointF symbolLeg = new PointF(335,20);
PointF descLeg = new PointF(360,16);
for (i = 0; i < arrValueNames.Length; i++)
{
Graphics.FillRectangle(new SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
Graphics.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);
Graphics.DrawString(arrValueNames[i].ToString(),new Font("Neuer detaillierter Körper",8),Brushes.Black,descLeg);
symbolLeg.Y += 15;
descLeg.Y += 16;
}
for (i = 0; i < arrValues.Length; i++)
{
Graphics.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
Graphics.DrawRectangle(Pens.Black,(i*35) + 15.200 - arrValues[i],20,arrValues[i]);
}
}
/// <Zusammenfassung>
/// Zeichne eine Kreisform auf die Leinwand
/// </summary>
private void Draw_Pie()
{
int i;
// currentangle stellt den aktuellen Winkel dar. totalangle stellt den maximalen Winkel dar. totalvalues stellt den maximalen Umsatz dar
float sglCurrentAngle = 0, sglTotalAngle = 0, sglTotalValues = 0;
// Maximale Umsätze berechnen
for (i = 0; i < arrValues.Length; i++)
sglTotalValues += arrValues[i];
for (i = 0; i < arrValues.Length; i++)
{
// Winkelwert des aktuellen Monats: Umsatz des aktuellen Monats / Maximaler Umsatz * 360
sglCurrentAngle = arrValues[i] / sglTotalValues * 360;
Graphics.FillPie(new SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
Graphics.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
#region Hilfsfunktion
private Farbe GetColor(int itemIndex)
{
Farbfarbe;
switch(itemIndex)
{
Fall 0:
Farbe = Farbe.Blau;
brechen;
Fall 1:
Farbe = Farbe.Rot;
brechen;
Fall 2:
color = Farbe.Gelb;
brechen;
Fall 3:
color = Farbe.Lila;
brechen;
Fall 4:
color = Color.Orange;
brechen;
Fall 5:
color = Farbe.Braun;
brechen;
Standard:
Farbe = Farbe.Blau;
brechen;
}
Farbe zurückgeben;
}
#endregion
}
}