Heim  >  Artikel  >  Backend-Entwicklung  >  10 Grundkenntnisse für die GDI+-Programmierung in C# 2

10 Grundkenntnisse für die GDI+-Programmierung in C# 2

高洛峰
高洛峰Original
2016-12-17 09:53:121025Durchsuche

5. Farbverlaufsfüllung

Sie müssen zwei Pinsel verwenden:

LinearGradientBrush(LinearGradientBrush)

PathGuadientBrush(PathGuadientBrush)

private void button4_Click (object sender,System.EventArgs e)

{

//Drawing surface

Graphics g =this.pictureBoxII1.CreateGraphics();

g .FillRectangle(Brushes.White,this.pictureBoxII1.ClientRectangle);

//Definiere einen linearen Verlaufspinsel

LinearGradientBrush lgbrush =

new LinearGradientBrush(

new Point(0, 10),

new Point(150, 10),

Color.FromArgb(255, 0, 0),

Color .FromArgb( 0, 255, 0));

Pen pen = new Pen(lgbrush);


//Zeichne ein gerades Segment mit einem linearen Pinsel-Verlaufseffektstift und fülle ein Rechteck

g.DrawLine(pen, 10, 130, 500, 130);

g.FillRectangle(lgbrush, 10, 150, 370, 30);


//Definieren Sie den Pfad und fügen Sie eine Ellipse hinzu

GraphicsPath gp = new GraphicsPath();

gp.AddEllipse(10, 10, 200, 100);

// Verwenden Sie diesen Pfad, um den Pfadverlaufspinsel zu definieren

PathGradientBrush brush =

new PathGradientBrush(gp);

//Color array

Color[] Farben = {

Color.FromArgb(255, 0, 0),

Color.FromArgb(100, 100, 100),

Color.FromArgb(0, 255 , 0),

Color.FromArgb(0, 0, 255)};

//Farbverlaufsverhältnis definieren

float[] r = {0.0f, 0.3 f , 0.6f, 1.0f};

ColorBlend blend = new ColorBlend();

blend.Colors = Colors;

blend.Positions = r;

brush.InterpolationColors = blend;

//Ein Rechteck außerhalb der Ellipse füllen

g.FillRectangle(brush, 0, 0, 210, 110);


//Definieren Sie den zweiten Pfadverlaufspinsel mit dem Pfad mit hinzugefügter Ellipse

GraphicsPath gp2 = new GraphicsPath();

gp2.AddEllipse(300, 0, 200, 100) ;

PathGradientBrush brush2 = new PathGradientBrush(gp2);

//Stellen Sie die Position und Farbe des Mittelpunkts ein

brush2.CenterPoint = new PointF(450, 50);

brush2.CenterColor = Color.FromArgb(0, 255, 0);

//Legen Sie die Rahmenfarbe fest

Color[] color2 = {Color.FromArgb(255, 0, 0)};

brush2.SurroundColors = color2;

// Füllen Sie die Ellipse mit dem zweiten Verlaufspinsel

g.FillEllipse(brush2, 300, 0, 200, 100);

}


6. GDI+-Koordinatensystem


Universelles Koordinatensystem – benutzerdefiniertes Koordinatensystem.

Seitenkoordinatensystem – virtuelles Koordinatensystem.
Gerätekoordinatensystem – Bildschirmkoordinatensystem.


Wenn die Einheiten des Seitenkoordinatensystems und des Gerätekoordinatensystems beide Pixel sind, sind sie gleich.

private void button10_Click(object sender, System.EventArgse)

{

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear (Color.White);

this.Draw(g);

}


private void Draw(Graphics g)

{

g.DrawLine(Pens.Black, 10, 10, 100, 100);

g.DrawEllipse(Pens.Black, 50, 50, 200, 100);

g.DrawArc(Pens.Black, 100, 10, 100, 100, 20, 160);

g.DrawRectangle(Pens.Green, 50, 200, 150, 100);

}


private void button5_Click(object sender, System.EventArgs e)

{

//Nach links verschieben

Graphics g = this .pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.TranslateTransform(-50, 0);

this.Draw(g) ;

}


private void button6_Click(object sender, System.EventArgs e)

{

//Nach rechts verschieben

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.TranslateTransform(50, 0);

this .Draw(g);

}


private void button7_Click(object sender, System.EventArgs e)

{

//Rotation

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.RotateTransform(-30);

this.Draw(g);

}


private void button8_Click(object sender, System.EventArgs e)

{

//Vergrößern

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.ScaleTransform(1.2f, 1.2f );

this.Draw(g);

}


private void button9_Click(object sender, System.EventArgs e)

{

//Herauszoomen

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g. ScaleTransform (0.8f, 0.8f);

this.Draw(g);

}


7. Globale Koordinaten – Transformation für jeden Punkt in der Zeichnung Oberfläche Alle Grafikelemente sind betroffen. Wird normalerweise zum Festlegen eines universellen Koordinatensystems verwendet.

Das folgende Programm verschiebt den ursprünglichen Fixpunkt in die Mitte des Steuerelements, wobei die Y-Achse nach oben zeigt.

//Zeichne zuerst einen Kreis

Graphics g = e.Graphics;

g.FillRectangle(Brushes.White, this.ClientRectangle);

g.DrawEllipse(Pens.Black, -100, -100, 200, 200);


//Um die y-Achse positiv nach oben zu machen, muss sie relativ zur x-Achse gespiegelt werden

//Die Transformationsmatrix ist [1,0,0,-1,0,0]

Matrix mat = new Matrix(1, 0, 0, -1, 0, 0);

g.Transform = mat;

Rectangle rect = this.ClientRectangle;

int w = rect.Width;

int h = rect.Height;

g.TranslateTransform(w/2, -h/2);


//Mit dem Ursprung als Mittelpunkt einen Kreis mit einem Radius von 100 erstellen

g.DrawEllipse( Pens.Red, -100, -100, 200, 200);
g.TranslateTransform(100, 100);

g.DrawEllipse(Pens.Green, -100, -100, 200, 200);

g.ScaleTransform(2, 2);

g.DrawEllipse(Pens.Blue , -100, -100, 200, 200);

8. Lokales Koordinatensystem – nur bestimmte Grafiken werden transformiert, während andere Grafikelemente unverändert bleiben.


protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

//Der Clientbereich ist festgelegt zu weiß

g.FillRectangle(Brushes.White, this.ClientRectangle);

//Die y-Achse zeigt nach oben

Matrix mat = new Matrix(1, 0, 0, - 1, 0, 0);

g.Transform = mat;

//Bewegen Sie den Koordinatenursprung in die Mitte des Formulars

Rechteck Rechteck = this.ClientRectangle;

int w = rect.Width;

int h = rect.Height;

g.TranslateTransform(w/2, -h/2) ;

/ /Zeichne eine Ellipse in globalen Koordinaten

g.DrawEllipse(Pens.Red, -100, -100, 200, 200);

g.FillRectangle( Brushes.Black, -108, 0 , 8, 8);

g.FillRectangle(Brushes.Black, 100, 0, 8, 8);

g.FillRectangle(Brushes.Black , 0, 100, 8, 8 );

g.FillRectangle(Brushes.Black, 0, -108, 8, 8);


//Eine Ellipse erstellen und transformieren es im lokalen Koordinatensystem

GraphicsPath gp = new GraphicsPath();

gp.AddEllipse(-100, -100, 200, 200);

Matrix mat2 = new Matrix();

//Translation

mat2.Translate(150, 150);

//Rotation

mat2.Rotate(30) ;

gp .Transform(mat2);

g.DrawPath(Pens.Blue, gp);

PointF[] p = gp.PathPoints;

g.FillRectangle (Brushes.Black, p[0].X-2, p[0].Y+2, 4, 4);

g.FillRectangle(Brushes.Black, p[3].X-2 , p[3].Y+2, 4, 4);

g.FillRectangle(Brushes.Black, p[6].X-4, p[6] .Y-4, 4, 4 );

g.FillRectangle(Brushes.Black, p[9].X-4, p[9].Y-4, 4, 4);

gp.Dispose();
//base.OnPaint (e);

}

9. Alpha-Blending

A in Farbe .FromArgb() ist Alpha. Alpha-Werte reichen von 0 bis 255. 0 bedeutet völlig transparent und 255 bedeutet völlig undurchsichtig.

Aktuelle Farbe = Vordergrundfarbe×Alpha/255+Hintergrundfarbe×(255-Alpha)/255

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

//Erstelle ein gefülltes Rechteck

SolidBrush-Pinsel = neuer SolidBrush(Color.BlueViolet);

g.FillRectangle(brush, 180, 70, 200, 150);

//Erstellen Sie eine Bitmap mit einem Transparenzeffekt zwischen den beiden Bitmaps

Bitmap bm1 = new Bitmap (200, 100 );

Graphics bg1 = Graphics.FromImage(bm1);

SolidBrush redBrush =

new SolidBrush(Color.FromArgb(210, 255, 0, 0));

SolidBrush greenBrush =

new SolidBrush(Color.FromArgb(210, 0, 255, 0));

bg1.FillRectangle(redBrush, 0, 0, 150, 70);

bg1.FillRectangle(greenBrush, 30, 30, 150, 70);

g.DrawImage(bm1, 100, 100);

//Create eine Bitmap ohne Transparenzeffekt zwischen den beiden Bitmaps

Bitmap bm2 = new Bitmap(200, 100);

Graphics bg2 = Graphics.FromImage(bm2) ;

bg2 .CompositingMode = CompositingMode.SourceCopy;

bg2.FillRectangle(redBrush, 0, 0, 150, 170);

bg2.FillRectangle(greenBrush, 30, 30, 150, 70);

g.CompositingQuality = CompositingQuality.GammaCorrected;

g.DrawImage(bm2, 300, 200);

//base.OnPaint (e);

}

10. Anti-Aliasing

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e .Graphics;

//8-fach vergrößern

g.ScaleTransform(8, 8);

//Grafiken ohne Anti-Aliasing und Text

Draw(g);

//Anti-Aliasing einstellen

g.SmoothingMode = SmoothingMode.AntiAlias;

/ /Nach rechts 40 verschieben

g.TranslateTransform(40, 0);

//Die nächste Zeichnung erfolgt nach dem Anti-Aliasing

Draw(g);

/ /base.OnPaint (e );

}

private void Draw(Graphics g)

{

//Grafiken und Text zeichnen

g.DrawLine(Pens. Gray, 10, 10, 40, 20);

g.DrawEllipse(Pens.Gray, 20, 20, 30, 10);

string s = " Anti-Aliasing-Test";

Schriftart = new Font("宋体", 5);

SolidBrush-Pinsel = new SolidBrush(Color.Gray);

g.DrawString(s , Schriftart, Pinsel, 10, 40);

}



Mehr in C# 10 Grundkenntnisse der GDI+-Programmierung 2. Für verwandte Artikel achten Sie bitte auf die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:c# GDI+ einfaches Zeichnen (4)Nächster Artikel:c# GDI+ einfaches Zeichnen (4)