Steigerung der Bitmap-Verarbeitungsgeschwindigkeit in C#
Direkte Pixelmanipulation in C#-Bitmaps mit GetPixel()
und SetPixel()
kann langsam sein. Für eine deutlich schnellere Verarbeitung bietet die Konvertierung der Bitmap in ein Byte-Array einen Leistungsvorteil, indem sie direkten Zugriff auf Pixeldaten ermöglicht.
Bitmap-zu-Byte-Array-Konvertierung
Diese Methode wandelt eine Bitmap effizient in ein Byte-Array um, das die RGBA-Daten jedes Pixels darstellt:
<code class="language-csharp">public static byte[] BitmapToByteArray(Bitmap bitmap) { BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); int length = bData.Stride * bData.Height; byte[] data = new byte[length]; System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, data, 0, length); bitmap.UnlockBits(bData); return data; }</code>
Byte-Array-zu-Bitmap-Rekonstruktion
Diese Funktion rekonstruiert die Bitmap aus dem Byte-Array:
<code class="language-csharp">public static Bitmap ByteArrayToBitmap(byte[] data, int width, int height) { Bitmap bitmap = new Bitmap(width, height); BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); System.Runtime.InteropServices.Marshal.Copy(data, 0, bData.Scan0, data.Length); bitmap.UnlockBits(bData); return bitmap; }</code>
Verstehen LockBits
und Marshal.Copy
LockBits()
sichert die Pixeldaten der Bitmap im Speicher für den direkten Zugriff. Marshal.Copy()
ermöglicht eine effiziente Datenübertragung zwischen verwalteten (C#) und nicht verwalteten (Bitmap-Speicher) Speicherbereichen.
Marshaling vs. unsicherer Code
Unsicherer Code ermöglicht zwar eine potenziell schnellere Ausführung, erfordert jedoch eine sorgfältige Handhabung. Marshalling bietet eine sicherere Alternative, wenn auch mit einem geringfügigen potenziellen Leistungseinbußen. Die beste Wahl hängt von den spezifischen Anforderungen und der Risikotoleranz Ihres Projekts ab.
Das obige ist der detaillierte Inhalt vonWie kann ich die Bitmap-Manipulation in C# mithilfe von Byte-Arrays beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!