Heim > Backend-Entwicklung > C++ > Wie kann ich die Bitmap-Manipulation in C# mithilfe von Byte-Arrays beschleunigen?

Wie kann ich die Bitmap-Manipulation in C# mithilfe von Byte-Arrays beschleunigen?

Susan Sarandon
Freigeben: 2025-01-21 13:31:09
Original
846 Leute haben es durchsucht

How Can I Speed Up Bitmap Manipulation in C# Using Byte Arrays?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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