Heim >Backend-Entwicklung >C++ >Wie kann ich die Bitmap-Manipulationsleistung in C#-Windows Forms-Apps über SetPixel und GetPixel hinaus verbessern?

Wie kann ich die Bitmap-Manipulationsleistung in C#-Windows Forms-Apps über SetPixel und GetPixel hinaus verbessern?

Barbara Streisand
Barbara StreisandOriginal
2025-01-19 02:36:08881Durchsuche

How Can I Improve Bitmap Manipulation Performance in C# Windows Forms Apps Beyond SetPixel and GetPixel?

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:

  • Direkter Speicherzugriff für überlegene Leistung.
  • Effiziente Speicherverwaltung mit Dispose().
  • Keine unsicheren Codeblöcke erforderlich.

Hinweise:

  • Angehefteter Speicher kann sich auf die Speicherbereinigung auswirken. Bei kritischen Leistungsszenarien mit Bedacht einsetzen.
  • Der direkte Zugriff auf Bitmap-Daten ermöglicht eine nahtlose Integration mit dem 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!

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