Heim >Backend-Entwicklung >C++ >Wie kann ich die Bitmap-Pixelmanipulation in C# über GetPixel und SetPixel hinaus beschleunigen?
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.
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>
DirectBitmap
implementiert IDisposable
, um die Verwaltung von Speicherressourcen zu erleichtern. 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.
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!