Heim > Backend-Entwicklung > C++ > Wie kann ich die Bitmap-Pixelmanipulation in C# über GetPixel und SetPixel hinaus beschleunigen?

Wie kann ich die Bitmap-Pixelmanipulation in C# über GetPixel und SetPixel hinaus beschleunigen?

Patricia Arquette
Freigeben: 2025-01-19 02:41:08
Original
147 Leute haben es durchsucht

How Can I Speed Up Bitmap Pixel Manipulation in C# Beyond GetPixel and SetPixel?

Verbesserung der Geschwindigkeit von C#-Bitmap-Pixeloperationen: eine Lösung, die über GetPixel und SetPixel hinausgeht

Einführung

In C#-Anwendungen werden die Methoden GetPixel und SetPixel häufig zum Bearbeiten von Bitmaps verwendet. In manchen Fällen kann ihre Leistung jedoch zu einem Engpass werden. In diesem Artikel werden schnellere Alternativen untersucht und mögliche Leistungsverbesserungen bewertet.

Direkte Bitmap-Klasse verwenden

Benutzerdefinierte DirectBitmap Klassen bieten direkten Zugriff auf Bitmap-Daten ohne zwischenzeitliche Sperr- und Entsperrvorgänge. Dieser Ansatz ermöglicht schnellere Pixeloperationen:

<code class="language-csharp">public class DirectBitmap : IDisposable
{
    public Int32[] Bits { get; private set; }
    public int Width { get; private set; }
    public int Height { get; private set; }

    public void SetPixel(int x, int y, Color color)
    {
        Bits[x + (y * Width)] = color.ToArgb();
    }

    public Color GetPixel(int x, int y)
    {
        int index = x + (y * Width);
        int col = Bits[index];
        return Color.FromArgb(col);
    }
}</code>
Nach dem Login kopieren

Vorteile der Verwendung direkter Bitmaps

  • Speicherzuweisung reduzieren: Änderungen an den Originaldaten werden ohne unnötige Speicherzuweisung direkt auf die Bitmap angewendet.
  • Keine Notwendigkeit, zusätzliche Objekte zu verwalten: Die Klasse DirectBitmap implementiert IDisposable, um die Verwaltung von Speicherressourcen zu erleichtern.
  • Kein unsicherer Code erforderlich: Diese Klasse erfordert keine unsicheren Codeblöcke, um die Codesicherheit zu gewährleisten.

Leistungsvergleich

Die folgende Tabelle vergleicht die Leistung der direkten Bitmap-Methode mit den Methoden LockBits und SetPixel:

方法 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

Wie aus der Tabelle hervorgeht, übertrifft die DirectBitmap-Klasse die SetPixel-Klasse deutlich in der Leistung, insbesondere beim Umgang mit größeren Bitmaps.

Fazit

Für die Pixelmanipulation in Bitmap-Verarbeitungsanwendungen kann die Verwendung einer benutzerdefinierten DirectBitmap-Klasse die Leistung erheblich verbessern. Dieser Ansatz ermöglicht eine schnellere Verarbeitung, da Sperr- und Entsperrvorgänge entfallen und ein direkter Zugriff auf Bitmap-Daten möglich ist.

Das obige ist der detaillierte Inhalt vonWie kann ich die Bitmap-Pixelmanipulation in C# über GetPixel und SetPixel hinaus beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage