Traitement bitmap rapide en C#
Lorsque vous travaillez avec des bitmaps volumineux, l'accès et l'exécution d'opérations pixel par pixel peuvent avoir un impact sur les performances. Les méthodes Bitmap.GetPixel()
et Bitmap.SetPixel()
intégrées de C# sont pratiques mais lentes. Cet article explore d'autres moyens de convertir rapidement un bitmap en tableau d'octets et de revenir en bitmap, permettant ainsi des opérations de pixels efficaces.
Convertir le bitmap en tableau d'octets
Marshal.Copy()
, vous pouvez copier les données de pixels d'un tampon bitmap dans un tableau d'octets. Bien que le marshaling ne nécessite pas de code dangereux, il peut être légèrement plus lent que la méthode LockBits. Convertir un tableau d'octets en bitmap
Marshal.Copy()
pour copier les données de pixels modifiées d'un tableau d'octets vers un tampon bitmap. Comparaison des performances
Exemple de méthode LockBits
<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>
Exemple de méthode de marshaling
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!