Schnelle Bitmap-Verarbeitung in C#
Beim Arbeiten mit großen Bitmaps kann der Zugriff und die Ausführung von Vorgängen auf Pixel-für-Pixel-Basis Auswirkungen auf die Leistung haben. Die in C# integrierten Methoden Bitmap.GetPixel()
und Bitmap.SetPixel()
sind praktisch, aber langsam. In diesem Artikel werden alternative Möglichkeiten zur schnellen Konvertierung einer Bitmap in ein Byte-Array und zurück in eine Bitmap untersucht, um effiziente Pixeloperationen zu ermöglichen.
Bitmap in Byte-Array konvertieren
Marshal.Copy()
können Sie Pixeldaten aus einem Bitmap-Puffer in ein Byte-Array kopieren. Obwohl für das Marshalling kein unsicherer Code erforderlich ist, ist es möglicherweise etwas langsamer als die LockBits-Methode. Byte-Array in Bitmap konvertieren
Marshal.Copy()
können Sie geänderte Pixeldaten aus einem Byte-Array zurück in einen Bitmap-Puffer kopieren. Leistungsvergleich
Beispiel für die LockBits-Methode
<code class="language-csharp">using System; using System.Drawing; using System.Runtime.InteropServices; public unsafe class FastBitmap { public static Image ThresholdUA(float thresh) { Bitmap b = new Bitmap(_image); BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat); byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat); byte* scan0 = (byte*)bData.Scan0.ToPointer(); for (int i = 0; i < ... }</code>
Beispiel einer Marshalling-Methode
<code class="language-csharp">using System; using System.Drawing; using System.Runtime.InteropServices; public class FastBitmap { public static Image ThresholdMA(float thresh) { Bitmap b = new Bitmap(_image); BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat); byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat); int size = bData.Stride * bData.Height; byte[] data = new byte[size]; Marshal.Copy(bData.Scan0, data, 0, size); for (int i = 0; i < ... }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich Bitmaps in C# effizient bearbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!