Eine kurze Diskussion zur Verwendung von GDI+ in C#
C# verwendet GDI+
Wenn unsere Software verschiedene Kreisdiagramme und Balkendiagramme zur Darstellung von Daten benötigt, denken wir möglicherweise an die Verwendung von Grafiksteuerelementen in Offices oder Steuerelementen von Drittanbietern, aber jetzt sind es dritthäufigste Steuerelemente von Drittanbietern erfordern eine Registrierung und einige kostenlose Steuerelemente tragen das Entwicklerzeichen. Die grafischen Steuerelemente, die Offices verwenden, können im Programm nicht gut gesteuert werden und ihre Benutzerfreundlichkeit ist ebenfalls gering. Daher verwende ich hier GDI+, um Kreisdiagramme und Balkendiagramme mit der Datenbank in C# zu verbinden und Daten anzuzeigen.
using System; using System.IO;//用于文件存取 using System.Data;//用于数据访问 using System.Drawing;//提供画GDI+图形的基本功能 using System.Drawing.Text;//提供画GDI+图形的高级功能 using System.Drawing.Drawing2D;//提供画高级二维,矢量图形功能 using System.Drawing.Imaging;//提供画GDI+图形的高级功能 namespace BaseLayer { public class PieChart { public PieChart() { } //Render是图形大标题,图开小标题,图形宽度,图形长度, 饼图的数据集和饼图的数据集要表示出来的数据 public Image Render(string title, string subTitle, int width, int height, DataSet chartData,int DataLine) { const int SIDE_LENGTH = 400; const int PIE_DIAMETER = 200; DataTable dt = chartData.Tables[0]; //通过输入参数,取得饼图中的总基数 float sumData = 0; foreach(DataRow dr in dt.Rows) { sumData += Convert.ToSingle(dr[DataLine]); } //产生一个image对象,并由此产生一个Graphics对象 Bitmap bm = new Bitmap(width,height); Graphics g = Graphics.FromImage(bm); //设置对象g的属性 g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH, (Convert.ToSingle(height))/SIDE_LENGTH); g.SmoothingMode = SmoothingMode.Default; g.TextRenderingHint = TextRenderingHint.AntiAlias; //画布和边的设定 g.Clear(Color.White); g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1); //画饼图标题 g.DrawString(title,new Font("Tahoma",14),Brushes.Black,new PointF(5,5)); //画饼图的图例 g.DrawString(subTitle,new Font("Tahoma",12),Brushes.Black,new PointF(7,35)); //画饼图 float curAngle = 0; float totalAngle = 0; for(int i=0;i<dt.Rows.Count;i++) { curAngle = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * 360; g.FillPie(new SolidBrush(ChartUtil.GetChartItemColor(i)), 100,65,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle); g.DrawPie(Pens.Black,100,65,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle); totalAngle += curAngle; } //画图例框及其文字 g.DrawRectangle(Pens.Black,200,300,199,99); g.DrawString("图表说明",new Font("Tahoma",12,FontStyle.Bold), Brushes.Black,new PointF(200,300)); //画图例各项 PointF boxOrigin = new PointF(210,330); PointF textOrigin = new PointF(235,326); float percent = 0; for(int i=0;i<dt.Rows.Count;i++) { g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)), boxOrigin.X,boxOrigin.Y,20,10); g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10); percent = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * 100; g.DrawString(dt.Rows[i][1].ToString() + " - " + dt.Rows[i][0].ToString() + " (" + percent.ToString("0") + "%)",new Font("Tahoma",10),Brushes.Black,textOrigin); boxOrigin.Y += 15; textOrigin.Y += 15; } //回收资源 g.Dispose(); return (Image) bm; } } //画条形图 public class BarChart { public BarChart() { } //Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集 public Image Render (string title, string subTitle, int width, int height, DataSet chartData) { const int SIDE_LENGTH = 400; const int CHART_TOP = 75; const int CHART_HEIGHT = 200; const int CHART_LEFT = 50; const int CHART_WIDTH = 300; DataTable dt = chartData.Tables[0]; //计算最高的点 float highPoint = 0; foreach(DataRow dr in dt.Rows) { if(highPoint<Convert.ToSingle(dr[0])) { highPoint = Convert.ToSingle(dr[0]); } } //建立一个Graphics对象实例 Bitmap bm = new Bitmap(width,height); try { Graphics g = Graphics.FromImage(bm); //设置条图图形和文字属性 g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH, (Convert.ToSingle(height))/SIDE_LENGTH); g.SmoothingMode = SmoothingMode.Default; g.TextRenderingHint = TextRenderingHint.AntiAlias; //设定画布和边 g.Clear(Color.White); g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1); //画大标题 g.DrawString(title,new Font("Tahoma",14),Brushes.Black,new PointF(5,5)); //画小标题 g.DrawString(subTitle,new Font("Tahoma",12),Brushes.Black,new PointF(7,35)); //画条形图 float barWidth = CHART_WIDTH / (dt.Rows.Count * 2); PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2),0); float barHeight = dt.Rows.Count; for(int i=0;i<dt.Rows.Count;i++) { barHeight = Convert.ToSingle(dt.Rows[i][0]) * 200 / highPoint * 1; barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight; g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)), barOrigin.X,barOrigin.Y,barWidth,barHeight); barOriginbarOrigin.X = barOrigin.X + (barWidth * 2); } //设置边 g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP), new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT)); g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT + CHART_WIDTH,CHART_TOP + CHART_HEIGHT)); //画图例框和文字 g.DrawRectangle(new Pen(Color.Black,1),200,300,199,99); g.DrawString("图表说明",new Font("Tahoma",12,FontStyle.Bold), Brushes.Black,new PointF(200,300)); //画图例 PointF boxOrigin = new PointF(210,330); PointF textOrigin = new PointF(235,326); for(int i=0;i<dt.Rows.Count;i++) { g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)), boxOrigin.X,boxOrigin.Y,20,10); g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10); g.DrawString(dt.Rows[i][1].ToString() + " - " + dt.Rows[i][0]. ToString(),new Font("Tahoma",10),Brushes.Black,textOrigin); boxOrigin.Y += 15; textOrigin.Y += 15; } //输出图形 g.Dispose(); return bm; } catch { return bm; } } } public class ChartUtil { public ChartUtil() { } public static Color GetChartItemColor(int itemIndex) { Color selectedColor; switch(itemIndex) { case 0: selectedColor = Color.Blue; break; case 1: selectedColor = Color.Red; break; case 2: selectedColor = Color.Yellow; break; case 3: selectedColor = Color.Purple; break; default: selectedColor = Color.Green; break; } return selectedColor; } } }
Das Obige ist ein vollständiges Quellprogramm zum Erstellen von Kreisdiagrammen und Balkendiagrammen in WinForm. Sie können Änderungen am oben genannten Programm vornehmen, um den Anforderungen Ihres eigenen Programms gerecht zu werden. C# verwendet GDI+, um die Methode zum Verbinden von Kreisdiagrammen und Balkendiagrammen mit der Datenbank zur Anzeige von Daten zu realisieren.
Weitere Artikel zur Verwendung von GDI+ in C# finden Sie auf der chinesischen PHP-Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.
