Heim >Backend-Entwicklung >C++ >Wie kann ich die Bitmap-Manipulationsleistung in C#-Windows Forms-Apps über SetPixel und GetPixel hinaus verbessern?
Erhöhung der Bitmap-Manipulationsgeschwindigkeit in C# Windows Forms: Alternativen zu SetPixel und GetPixel
SetPixel
und GetPixel
sind notorisch langsam für die Bitmap-Manipulation in C#-Windows Forms-Anwendungen. In diesem Artikel werden leistungsstarke Alternativen untersucht.
Die DirectBitmap-Klasse: Ein überlegener Ansatz
Die DirectBitmap
-Klasse bietet direkten Zugriff auf Bitmap-Daten und umgeht den Leistungsaufwand von LockBits
und SetPixel
:
<code class="language-csharp">public class DirectBitmap : IDisposable { // ... public void SetPixel(int x, int y, Color colour) { int index = x + (y * Width); int col = colour.ToArgb(); Bits[index] = col; } public Color GetPixel(int x, int y) { int index = x + (y * Width); int col = Bits[index]; Color result = Color.FromArgb(col); return result; } // ... }</code>
Diese direkte Speichermanipulation reduziert die Speicherzuweisung erheblich, was zu einer schnelleren Verarbeitung führt.
Pixelrohdaten mit Bytes: Noch schneller
Für maximale Geschwindigkeit stellen Sie Pixeldaten mit Bytes anstelle von Ganzzahlen dar:
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
Jedes Pixel verwendet jetzt 4 Bytes (ARGB). Denken Sie daran, SetPixel
und GetPixel
entsprechend anzupassen.
Vorteile von DirectBitmap:
Dispose()
.Hinweise:
Graphics
-Objekt.Leistungsbenchmarks:
Leistungstests zeigen den klaren Vorteil von DirectBitmap
:
Method | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 |
---|---|---|---|---|---|---|
DirectBitmap | 2 | 28 | 668 | 8219 | 178639 | |
LockBits | 2 | 3 | 33 | 670 | 9612 | 197115 |
SetPixel | 45 | 371 | 5920 | 97477 | 1563171 | 25811013 |
Durch die Implementierung dieser optimierten Techniken können C#-Entwickler die Effizienz der Bitmap-Manipulation in ihren Windows Forms-Anwendungen erheblich verbessern.
Das obige ist der detaillierte Inhalt vonWie kann ich die Bitmap-Manipulationsleistung in C#-Windows Forms-Apps über SetPixel und GetPixel hinaus verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!