Dans les applications C#, les méthodes GetPixel
et SetPixel
sont couramment utilisées pour manipuler les bitmaps. Cependant, dans certains cas, leurs performances peuvent devenir un goulot d’étranglement. Cet article explore des alternatives plus rapides et évalue les améliorations potentielles des performances.
Les classes DirectBitmap
personnalisées offrent un accès direct aux données bitmap sans opérations intermédiaires de verrouillage et de déverrouillage. Cette approche permet des opérations de pixels plus rapides :
<code class="language-csharp">public class DirectBitmap : IDisposable { public Int32[] Bits { get; private set; } public int Width { get; private set; } public int Height { get; private set; } public void SetPixel(int x, int y, Color color) { Bits[x + (y * Width)] = color.ToArgb(); } public Color GetPixel(int x, int y) { int index = x + (y * Width); int col = Bits[index]; return Color.FromArgb(col); } }</code>
DirectBitmap
implémente IDisposable
pour faciliter la gestion des ressources mémoire. Le tableau suivant compare les performances de la méthode bitmap directe avec les méthodes LockBits
et SetPixel
:
方法 | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 |
---|---|---|---|---|---|---|
DirectBitmap | 2 | 28 | 668 | 8219 | 178639 | |
LockBits | 2 | 3 | 33 | 670 | 9612 | 197115 |
SetPixel | 45 | 371 | 5920 | 97477 | 1563171 | 25811013 |
Comme le montre le tableau, la classe DirectBitmap
surpasse considérablement SetPixel
en termes de performances, en particulier lorsqu'il s'agit de bitmaps plus grands.
Pour la manipulation de pixels dans les applications de traitement bitmap, l'utilisation d'une classe DirectBitmap
personnalisée peut améliorer considérablement les performances. Cette approche permet un traitement plus rapide en éliminant les opérations de verrouillage et de déverrouillage et en fournissant un accès direct aux données bitmap.
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!