Heim > Artikel > Backend-Entwicklung > C# GDI+ Programmierung (3)
Alpha-Wert der Farbe
Farbe kann auch den Alpha-Wert festlegen, bei dem es sich um Transparenz handelt. Wie zum Beispiel Color.FromArgb(120,255,255,255). FromArgb hat vier Parameter, der erste gibt den Alpha-Wert an.
Die letzten drei sind Farbwerte RGB.
Der Alpha-Wertebereich liegt zwischen 0 und 255, 0 bedeutet vollständig transparent und 255 bedeutet undurchsichtig.
Sehen Sie sich ein Beispiel eines durchscheinenden Pinsels an:
private void formPaint(Object sender, PaintEventArgs e)
{
//Pfad erstellen
GraphicsPath path = new Graph icsPath();
Rechteck rect = neues Rechteck(0, 0, 100, 100);
SolidBrush strBrush=new SolidBrush(Color.Orange);
e.Graphics.DrawString("ABCDEFGHIJK", new Font("黑体", 20f), strBrush, rect);
path.AddRectangle(rect);
//Erstelle einen Pfadpinsel
PathGradientBrush brush = new PathGradientBrush(path);
//Mittelpunktfarbe
brush.CenterColor =. Color.FromArgb(120,255,255,255);
brush.SurroundColors , dann ist die angezeigte Zeichenfolge nicht sichtbar.
Anti-Aliasing
Das Eliminieren des Aliasings von Linien wird durch Festlegen des SmoothingMode-Attributmitglieds in der Graphics-Klasse erreicht, bei der es sich um einen Aufzählungstyp handelt.
Beispielanweisung zum Festlegen von Anti-Aliasing: e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
Nach der Eliminierung von Aliasing sehen die Linien viel glatter aus.
Der entsprechende Code lautet:
Stift pen=new Pen(Color.Green,2);
Rechteck rect1 = neues Rechteck(0, 0, 100, 100);e.Graphics.DrawEllipse(pen, rect1);
. Rechteck rect2 = neues Rechteck( 100, 0, 100, 100);e .Graphics.DrawEllipse(pen, rect2);
Der SmoothingMode Die Aufzählung hat auch einige andere Mitglieder, die unterschiedliche Grade des Anti-Aliasing festlegen oder Aliasing nicht beseitigen können.Text-Antialiasing
Um den angezeigten Text zu antialiasen, legen Sie einfach TextRenderingHint fest.
Beispielcode:
private void formPaint(Object sender, PaintEventArgs e)
{
SolidBrush brush = new SolidBrush(Color.Green);
e.Graphics.DrawString("ABCDEFGHIJKL", new Font("宋体", 15f), brush, 0, 20); e.Graphics. Diese APIs können aufgerufen werden. Und viele der Konzepte dort sind ähnlich. Zum Beispiel Fenstergriff, Bereichsgriff.
Zum Beispiel kann die GetHrgn-Funktion in der Region-Klasse das Regionshandle abrufen.
Lassen Sie uns außerdem über die Beziehung zwischen Bereichen und Pfaden sprechen, damit Sie besser verstehen können, worum es bei Bereichen geht. Die Beziehung zwischen Bereichen und Pfaden ähnelt der Beziehung zwischen gefüllten Grafiken und Grafiken,
Sie können Pfade und Rechtecke verwenden, um eine Fläche zu erstellen. Durch den Konstruktor der Region.
Das folgende Beispiel erstellt zwei Bereiche mit Rechtecken und füllt diese.
private void formPaint(Object sender, PaintEventArgs e)
{//Zwei rechteckige Regionen mit 100 Breite und Höhe
Region region1=new Region(new Rechteck(0 ,0,100,100)) ;Region region2=new Region(new Rechteck(50,50,100,100));
//Pinsel 1 erstellen und Bereich 1 füllen. Der Alphawert der Farbe beträgt 125SolidBrush brush1 = new SolidBrush( Color .FromArgb(125, 255, 0, 0));
e.Graphics.FillRegion(brush1, region1); //Pinsel 2 erstellen und Bereich 2 füllen
SolidBrush brush2 = new SolidBrush( Color. FromArgb(125, 0, 255, 0));
e.Graphics.FillRegion(brush2, region2);
Die fünfundneunzig Funktionen CombineRgn wurden ebenfalls erwähnt, Sie können sich auf diese Funktion beziehen.
Der letzte Parameter nCombineMode der CombineRgn-API-Funktion gibt an, wie zwei Regionen zusammengeführt werden, daher sollte die Zusammenführung in der Region-Klasse auch eine ähnliche Funktion haben.
gibt an, wie zusammengeführt wird, aber die Region-Klasse wird nicht mit Parametern angegeben. Region ruft direkt verschiedene Funktionen auf.
Zum Beispiel ist die Funktion Region.Intersect RGN_AND und Region.Union ist die RGN_OR-Methode zum Zusammenführen. . region1.Exclude ist RGN_DIFF,
Region.Xor wird im RGN_XOR-Modus zusammengeführt
Erklärung der nCombineMode-Parameter:
>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>von API CombineRgn Funktionen>>>>>>>>>>>>>>>>>>> ;>>>>>> ;>>>>>>>>>>>>>>>>>>> ;
RGN_AND Der überlappende Teil von die beiden Regionen
RGN_OR Kombination der beiden Regionen
RGN_DIFF Der nicht überlappende Teil von hSrcRgn1
RGN_XOR Der nicht überlappende Teil von hSrcRgn1 und hSrcRgn2 Teil
<<<<<<<<<<<<<<<<<<<<<<< ;< ;<<<<<<<<<<<<<<<<<<<<<<< ;<< ;<<<<<<<<<<<<<<<<<<<<<< ;<<< ;<<<<<<<<<<<<<<<<<<<<< ;<<<< ;
Es gibt auch ein Funktionskomplement in der Region-Klasse. Der durch Zusammenführen mit dieser Funktion erhaltene Bereich ist der nicht überlappende Teil von Bereich 2.
Sehen Sie sich das Beispiel an:
private void formPaint(Object sender, PaintEventArgs e)
{
//Zwei rechteckige Regionen mit 100 Breite und Höhe
Region region1 = new Region(new Rechteck(0,0,100,100));
Region2=new Region(new Rechteck(50,50,100,100));
//Verwende die Fläche.
region1.Xor(region2); 1 )
{
InitializeComponent();
//Erstelle einen kreisförmigen Pfad
GraphicsPath path = new GraphicsPath();
Region.IsVisible ermittelt, ob ein Punkt (oder Rechteck) innerhalb der Region liegt.
Sehen Sie sich das Beispiel an. Im Beispiel wird ein kreisförmiger Bereich erstellt. Sobald die Maus den kreisförmigen Bereich betritt, wird der Bereich angezeigt Rot.
öffentliche Teilklasse Form1: Form
{
//Der Pinsel, der den Bereich im Normalzustand ausfüllt
public SolidBrush norBrush=new SolidBrush(Color.Green);
//Die Maus ist im Bereich Der Pinsel, der die Zeit ausfüllt
public SolidBrush hovBrush = new SolidBrush(Color.Red);
//Gibt an, ob sich die Maus innerhalb des Bereichs befindet
public bool hovFlag = false;
/ /Kreisförmiger Bereich
public Region region;
public Form1()
InitializeComponent();
GraphicsPath path = new GraphicsPath();
path.AddEllipse( 50, 50, 100, 100) ;
//Erstelle eine Region über den Pfad
region = new Region(path);
e.Graphics.FillRegion(hovBrush, region);<.> e.Graphics.FillRegion(norBrush, Region);
graphics = this.CreateGraphics();
//Das erste Mal, wenn die Maus die Region betritt
if (region.IsVisible(e.X, e.Y) && hovFlag != true)
hovFlag = true;
graphics.FillRegion(hovBrush, region);
.Y) != true && hovFlag)
{