Maison >développement back-end >C++ >Comment puis-je accélérer la manipulation des bitmaps en C# à l'aide de tableaux d'octets ?
Augmentation de la vitesse de traitement des bitmaps en C#
La manipulation directe des pixels dans les bitmaps C# à l'aide de GetPixel()
et SetPixel()
peut être lente. Pour un traitement beaucoup plus rapide, la conversion du Bitmap en tableau d'octets offre un avantage en termes de performances en fournissant un accès direct aux données de pixels.
Conversion de bitmap en tableau d'octets
Cette méthode convertit efficacement un Bitmap en un tableau d'octets représentant les données RGBA de chaque pixel :
<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>
Tableau d'octets vers reconstruction bitmap
Cette fonction reconstruit le Bitmap à partir du tableau d'octets :
<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>
Compréhension LockBits
et Marshal.Copy
LockBits()
sécurise les données de pixels du Bitmap en mémoire pour un accès direct. Marshal.Copy()
facilite un transfert de données efficace entre les espaces mémoire gérés (C#) et non gérés (mémoire Bitmap).
Marshaling vs code dangereux
Bien que le code non sécurisé offre une exécution potentiellement plus rapide, il nécessite une manipulation méticuleuse. Le marshaling offre une alternative plus sûre, bien qu’avec un compromis potentiel mineur en termes de performances. Le meilleur choix dépend des besoins spécifiques de votre projet et de votre tolérance au risque.
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!