Maison >développement back-end >C++ >Comment puis-je accélérer la manipulation des bitmaps en C# ?
Améliorer les performances des bitmaps en C#
Pour les applications exigeant des vitesses de traitement d'image élevées, l'optimisation de la manipulation des données de pixels Bitmap est essentielle. Si Bitmap.GetPixel()
et Bitmap.SetPixel()
suffisent pour des tâches simples, la gestion d'images volumineuses ou de modifications fréquentes nécessite une approche plus efficace.
Accès direct aux données de pixels
Modifier efficacement des pixels individuels implique de convertir le Bitmap en un tableau d'octets. Ceci est mieux réalisé en utilisant LockBits
ou le marshaling.
La LockBits
Technique :
BitmapData.LockBits()
fournit un pointeur de mémoire direct vers les données de pixels, permettant un accès rapide. Cependant, cela nécessite l'utilisation de code non sécurisé et le verrouillage explicite du Bitmap. Exemple :
<code class="language-csharp">unsafe Image ThresholdUA(Image image, float thresh) { Bitmap b = new Bitmap(image); BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, b.PixelFormat); byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat); byte* scan0 = (byte*)bData.Scan0.ToPointer(); // Pixel manipulation loop using scan0 pointer... }</code>
Marshaling pour un accès sécurisé :
System.Runtime.InteropServices.Marshal.Copy()
offre une alternative plus sûre, en transférant les données de pixels vers un tableau d'octets sans code dangereux. Voici comment :
<code class="language-csharp">Image ThresholdMA(Image image, float thresh) { Bitmap b = new Bitmap(image); BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, b.PixelFormat); byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat); int size = bData.Stride * bData.Height; byte[] data = new byte[size]; System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, data, 0, size); // Pixel manipulation loop using data array... }</code>
Comparaison des performances :
LockBits
surpasse généralement le marshaling en raison de son accès direct à la mémoire. Cependant, le marshaling évite le code dangereux, ce qui le rend préférable dans certains contextes.
Conclusion :
La conversion de bitmaps en tableaux d'octets à l'aide de LockBits
ou du marshaling améliore considérablement l'efficacité de la manipulation des pixels, en particulier pour les images volumineuses ou fréquemment traitées. Choisissez la méthode qui équilibre le mieux les exigences de performances et de sécurité du 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!