Augmentation de la vitesse de manipulation des bitmaps dans les formulaires Windows C# : alternatives à SetPixel et GetPixel
SetPixel
et GetPixel
sont notoirement lents pour la manipulation de bitmaps dans les applications Windows Forms C#. Cet article explore des alternatives hautes performances.
La classe DirectBitmap : une approche supérieure
La classe DirectBitmap
fournit un accès direct aux données bitmap, contournant la surcharge de performances de LockBits
et SetPixel
:
<code class="language-csharp">public class DirectBitmap : IDisposable { // ... public void SetPixel(int x, int y, Color colour) { int index = x + (y * Width); int col = colour.ToArgb(); Bits[index] = col; } public Color GetPixel(int x, int y) { int index = x + (y * Width); int col = Bits[index]; Color result = Color.FromArgb(col); return result; } // ... }</code>
Cette manipulation directe de la mémoire réduit considérablement l'allocation de mémoire, ce qui accélère le traitement.
Données de pixels brutes avec octets : encore plus rapides
Pour une vitesse ultime, représentez les données de pixels en utilisant des octets au lieu d'entiers :
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
Chaque pixel utilise désormais 4 octets (ARGB). N'oubliez pas d'ajuster SetPixel
et GetPixel
en conséquence.
Avantages de DirectBitmap :
Dispose()
.Points à noter :
Graphics
.Repères de performances :
Les tests de performances démontrent le net avantage de DirectBitmap
:
Method | 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 |
En implémentant ces techniques optimisées, les développeurs C# peuvent améliorer considérablement l'efficacité de la manipulation des bitmaps dans leurs applications Windows Forms.
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!