Heim Backend-Entwicklung C#.Net-Tutorial C# GDI+ Programmierung (4)

C# GDI+ Programmierung (4)

Dec 17, 2016 am 10:11 AM

Screenshot
Die CopyFromScreen-Funktion in der Grahpics-Klasse kann den Bildschirm in das Graphics-Objekt kopieren. Wenn das Grafikobjekt aus dem Fensterformular erstellt wird, wird der Bildschirm direkt
im Fenster angezeigt. Schauen Sie sich das Beispiel an: Fügen Sie dem Fenster eine Schaltfläche und dann einen Click-Event-Handler zur Schaltfläche hinzu.
Der Code in der Funktion lautet wie folgt:
private void button1_Click(object sender, EventArgs e)
{
this.CreateGraphics().CopyFromScreen(50,50, 0, 0, this. Size,CopyPixelOperation .SourceCopy);
}
Der erste Parameter und der zweite Parameter geben an, wo mit dem Kopieren auf dem Bildschirm begonnen werden soll, und die folgende 0,0 bedeutet, dass der Bildschirm in das Fenster kopiert wird, beginnend an der Stelle im Fenster zeigen.
this.Size ist die Größe (Breite und Höhe), die kopiert werden soll.

ist in VC++. Das ist nur eine andere Art, es auszudrücken. Das Endergebnis ist immer noch das gleiche.

Die vorherige Erstellung von Grafikobjekten erfolgte ausschließlich über das Fenster. Dieses Mal erstellen wir das Grafikobjekt über Bilder, damit wir auf den Bildern zeichnen können.
Das Erstellen von Bildobjekten ist nicht die einzige Möglichkeit, Dateien zu laden. Wir können eine „leere“ Bitmap erstellen (über den Konstruktor). Diese Bitmap enthält keine spezifischen Daten, oder die darin enthaltenen Standarddaten sind nutzlos. Zeichnen Sie hinein und fügen Sie Daten hinzu.


Beispiel: Machen Sie einen Screenshot und speichern Sie das Bild als Datei
private void button1_Click(object sender, EventArgs e)
{
//Erstellen Sie ein Bitmap-Bild mit einer Breite von 800 , 600 Höhe, so ein großer Container.
Bitmap bmp = new Bitmap(800, 600);
//Erstelle ein Grahpics-Objekt aus dem Bild
Graphics gr = Graphics.FromImage(bmp);
//Kopiere den Bildschirm in Bitmap
gr.CopyFromScreen(0, 0, 0, 0, new Size(800, 600), CopyPixelOperation.SourceCopy);
//Als Bilddatei speichern
bmp.Save("d:\screen.jpg ") ;
}
Wie wäre es damit? Es ist ganz einfach. Es sind vier Codezeilen erforderlich, um einen Screenshot zu erstellen und ihn als Datei zu speichern. VC++ erfordert viele Codezeilen. Darüber hinaus wird Bitmap von der Image-Klasse abgeleitet.

Einmaliges Zeichnen mit doppelter Pufferung
Schauen wir uns ein Beispiel ohne Verwendung der doppelten Pufferung an. Wenn sich die Maus innerhalb des Fensters bewegt, zeigt das Rechteck in der oberen linken Ecke die aktuelle Position der Maus an
Öffentliche Teilklasse Form1: Form
{
public Form1()
{
InitializeComponent();
this.MouseMove += formMouseMove;
}
private void formMouseMove(object sender, MouseEventArgs e)
Who ’Who 'Who' Who 'rechteckig, lineargradientbrush pinsel =
neu lineargradientBrush (rechte, farbe, aus der Freomargb (44, 55, 66), color.fromargb (123, 150, 189),
LinearGradientMode.Horizontal);
gr.FillRectangle(brush, rect);
                   // Ein Rechteck zeichnen
Pen pen = new Pen(Color.Green, 2);
gr.DrawRectangle( pen, rect);
//Text anzeigen
gr.TextRenderingH int = System.Drawing.Text.AntiAlias;
String str = String.Format("Mausposition:n{0},{ 1}", e.X, e.Y);
gr.DrawString(str, new Font("黑体", 11 ),Brushes.White, rect);
}
}
Wie Sie sehen können , wenn die Maus bewegt wird, blinkt das Rechteck in der oberen linken Ecke offensichtlich. Dies liegt daran, dass dreimal gezeichnet, das Rechteck gefüllt und dann Text angezeigt wird. Das hat es verursacht.
Je öfter Sie zeichnen, desto deutlicher wird dieses Flackern.
Und diese drei Zeichnungen müssen am Ende nur ein Ergebnis erhalten, nämlich ein Bild. Dann können wir die doppelte Pufferung verwenden, um es zu vervollständigen. Zeichnen Sie zuerst die zu zeichnenden Grafiken in die Bitmap. Zeichnen Sie dann einfach die Bitmap in das Fenster.
Sehen Sie sich das Beispiel an:
private void formMouseMove(object sender, MouseEventArgs e)
{
Graphics Graphics = this.CreateGraphics();
//From Create Graphics object in Bitmap
           Bitmap bmp = new Bitmap (100,35); ), Color.FromArgb(123, 150, 189),
LinearGradientMode.Horizontal);
gr.FillRectangle(brush , rect);
//Zeichne ein Rechteck
Stift pen = new Pen(Color.Green, 2);
gr.DrawRectangle(pen, rect);
//Text anzeigen
gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiA lias;
String str = String.Format("Mausposition:n{0},{1}", e.X, e.Y);
gr.DrawString(str, new Font("黑体", 11),Brushes. White , RECT);

// Draw

Graphics.DrawImage (BMP, 0, 0);

Holen Sie sich die Bitmap

Drawtobitmap Funktion, die zeichnen kann Darstellung eines Fensters oder Steuerelements in einer Bitmap. Es gehört zur Control-Klasse, und sowohl die Fensterklasse als auch die Control-Klasse sind von der Control-Klasse abgeleitet.

Sehen Sie sich das Beispiel an: (Code einer Button-Click-Event-Handler-Funktion)
private void button1_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(Width, Height);
this.DrawToBitmap(bmp, neues Rechteck(0, 0, Breite, Höhe));
bmp.Save("d:\form.jpg");
}
Der zweite Parameter von DrawToBitmap , ist der Bereich des Fensters, der in der Bitmap angezeigt wird. Dieses Bild kann nicht verkleinert oder vergrößert werden. Die Größe des Fensters entspricht der Größe der Bitmap.
Wenn Sie 10, 10, 50, 50 eingeben, werden 0, 0, 50, 50 angezeigt In 10 der Bitmap angezeigt, kann die Startposition des Fensters nicht angegeben werden. Es kann nur bei Position 0, 0 beginnen.

Den Wert eines Pixels abrufen

Die GetPixel-Funktion in der Bitmap-Klasse kann den Farbwert eines Pixels abrufen. Wenn Sie den Farbwert eines Pixels im Fenster abrufen möchten, können Sie zuerst aufrufen die DrawToBitmap-Funktion und geben Sie

Das Fenster wird als Bitmap gespeichert. Dann hol es dir nochmal. Noch etwas: Es gibt auch eine entsprechende Funktion SetPixel, um den Farbwert eines Pixels festzulegen.

Holen Sie sich den Anzeigebereich für PNG-Bilder und erstellen Sie ein unregelmäßiges Fenster.

Um den PNG-Bildbereich abzurufen, können Sie die Funktion GetPixel verwenden, um den Farbwert jedes Pixels im Bild abzurufen. Wenn der Alpha-Wert 0 ist, ist es transparent, andernfalls fügen Sie diesen Punkt zum Bereich hinzu. Wie erhält man also den Alpha-Wert eines Color-Objekts? Rufen Sie die ToArgb-Mitgliedsfunktion auf. Dies ist eine 32-Bit-Ganzzahl, die nur vier 8-Bit-Werte speichern kann: A, R, G, B.

Sehen Sie sich das Beispiel an und extrahieren Sie den Alpha-Wert
{
Color cor1 = Color.FromArgb(123,225,229,230);
//Erhalten Sie den Argb-Wert von Color
int argb = cor2.ToArgb( );
//In Zeichenarray konvertieren
byte[] bargb = BitConverter.GetBytes(argb);
//bargb[3] speichert den Alpha-Wert
String str = String.Format( " {0},{1},{2},{3}", bargb[0], bargb[1], bargb[2], bargb[3]);
MessageBox.Show(str);
}
Ein vollständiges Beispiel, erhalten Sie den PNG-Anzeigebereich

Beispielcode:

public Form1()
{
InitializeComponent();
                 //PNG-Bilder laden Bitmap BMP = Neue Bitmap ("D: \ Image \ Win.png"); // Bestimmen Sie den Farbwert jedes Pixels und erhalten Sie den Anzeigebereich des Bildes
for (int y = 0; y & lt ; bmp.Height; y++)
for (int x = 0; x < bmp.Width;                                                                                    . if (bargb[3] != 0)
                                                           
                             Pixelbereich zum Pfad                                                                                             { Etwas unzuverlässig, wenn der Farbwert einiger Pixel im PNG-Bild halbtransparent ist, sodass Sie nicht das gewünschte Erscheinungsbild erhalten. Obwohl einige Teile des PNG-Bildes transparent zu sein scheinen.
Die Lösung besteht darin, PNG-Bilder selbst zu erstellen und Ihren eigenen Regeln zu folgen. Suchen Sie nicht online danach.

Nachdem Sie ein unregelmäßiges Fenster eingerichtet haben, können Sie das PNG-Bild in das Fenster zeichnen. Aufgrund des Transparenzproblems müssen Sie das Fenster jedoch zuerst mit einem transparenten Pinsel füllen und dann zeichnen.

Aber es gibt noch ein weiteres Problem: Die Zeichnung von Fenstern, die nicht zum Clientbereich gehören, wird wie unsere vorherige Zeichnung vollständig im Fenster-Clientbereich gezeichnet.

Wenn das zu zeichnende Bild dem Fenster entspricht, muss es aus dem Nicht-Client-Bereich gezeichnet werden. Wie geht das? Lassen Sie uns im nächsten Kapitel darüber sprechen.




Weitere Artikel zum Thema C# GDI+-Programmierung (4) finden Sie auf der chinesischen PHP-Website!



Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So fügen Sie C-Compiler der nächsten Ebene hinzu So fügen Sie C-Compiler der nächsten Ebene hinzu Mar 03, 2025 pm 05:44 PM

In diesem Artikel wird erläutert, wie Sie neue Zeilenzeichen in C mit der \ n Escape -Sequenz innerhalb von Printf erstellen und Funktionen setzt. Es beschreibt die Funktionalität und liefert Codebeispiele, die die Verwendung für Zeilenumbrüche in der Ausgabe demonstrieren.

Was sind die Alternativen zu Null in der C -Sprache Was sind die Alternativen zu Null in der C -Sprache Mar 03, 2025 pm 05:37 PM

In diesem Artikel wird die Herausforderungen des Nullzeigers in C untersucht. Es argumentiert, dass das Problem nicht null selbst, sondern seinen Missbrauch ist. Der Artikel beschreibt Best Practices zur Verhinderung der Verhindern, einschließlich Vor-Dre-Dre-Dereferenz-Überprüfungen, Zeiger initiali

Welcher C -Sprachkompiler ist besser? Welcher C -Sprachkompiler ist besser? Mar 03, 2025 pm 05:39 PM

Dieser Artikel führt Anfänger bei der Auswahl eines C -Compilers. Es wird argumentiert, dass GCC aufgrund seiner Benutzerfreundlichkeit, der breiten Verfügbarkeit und der umfangreichen Ressourcen für Anfänger am besten geeignet ist. Es wird jedoch auch GCC, Clang, MSVC und TCC vergleicht, wodurch ihre Unterschiede hervorgehoben werden

Ist Null in der modernen Programmierung in der C -Sprache noch wichtig? Ist Null in der modernen Programmierung in der C -Sprache noch wichtig? Mar 03, 2025 pm 05:35 PM

Dieser Artikel betont die anhaltende Bedeutung von NULL in der modernen C -Programmierung. Trotz Fortschritten bleibt NULL für die explizite Zeigerverwaltung von entscheidender Bedeutung und verhindert Segmentierungsfehler, indem das Fehlen einer gültigen Speicheradresse markiert wird. Bestes Prac

Was sind die Webversionen von C -Sprach Compilern? Was sind die Webversionen von C -Sprach Compilern? Mar 03, 2025 pm 05:42 PM

Dieser Artikel bewertet Online -C -Compiler für Anfänger, die sich auf die Benutzerfreundlichkeit und Debugging -Funktionen konzentrieren. OnlineGDB und Repl.it sind für ihre benutzerfreundlichen Schnittstellen und hilfreichen Debugging-Tools hervorgehoben. Andere Optionen wie Programmiz und Compil

Methode zum Kopieren von Code nach C -Sprachkompiler Methode zum Kopieren von Code nach C -Sprachkompiler Mar 03, 2025 pm 05:43 PM

In diesem Artikel werden effizientes Codekopieren in C -IDEs erläutert. Es wird betont, dass das Kopieren eine IDE -Funktion ist, keine Compiler -Funktion, und Details Strategien für eine verbesserte Effizienz, einschließlich der Verwendung von IDE -Auswahltools, Codefalten, Suchen/Ersetzen, Templa

C Sprache Online -Programmierwebsite C Sprachkompiler Offizielle Website Zusammenfassung C Sprache Online -Programmierwebsite C Sprachkompiler Offizielle Website Zusammenfassung Mar 03, 2025 pm 05:41 PM

Dieser Artikel vergleicht Online -C -Programmierplattformen und zeigt Unterschiede in Funktionen wie Debugging -Tools, IDE -Funktionalität, Standardkonformität und Speicher-/Ausführungsgrenzen. Es wird argumentiert, dass die "beste" Plattform von den Benutzerbedürfnissen abhängt.

C Sprachkompilierer -Installations -Tutorial (Computerversion) C Sprachkompilierer -Installations -Tutorial (Computerversion) Mar 03, 2025 pm 05:41 PM

Dieses Tutorial führt Benutzer durch die Installation von C -Compilern unter Windows, MacOS und Linux. Die Installation für beliebte Compiler (Mingw, Visual Studio, Xcode, GCC) erläutert die Installation der Umgebungsvariablen und bietet Schritte zur Fehlerbehebung

See all articles