Optimisation de la manipulation Bitmap en C# : alternatives supérieures à SetPixel et GetPixel
Les méthodes SetPixel
et GetPixel
de C# sont notoirement lentes pour la manipulation de bitmaps. Cet article présente des alternatives plus rapides et plus efficaces.
L'inefficacité de SetPixel/GetPixel
Le code suivant illustre l'utilisation traditionnelle et inefficace de SetPixel
et GetPixel
:
<code class="language-csharp">// Inefficient code using SetPixel and GetPixel</code>
Cette approche souffre d'un surcoût important dû aux nombreux appels à GetPixel
et SetPixel
.
La classe DirectBitmap : une solution haute performance
Une alternative très efficace est la classe DirectBitmap
, offrant un accès direct aux données brutes du bitmap. Cela contourne le besoin de GetPixel
et SetPixel
, conduisant à des gains de performances substantiels. Un exemple utilisant DirectBitmap
pour dessiner un rectangle :
<code class="language-csharp">using (var g = Graphics.FromImage(dbm.Bitmap)) { g.DrawRectangle(Pens.Black, new Rectangle(50, 50, 100, 100)); }</code>
Optimisation de la mémoire avec des tableaux d'octets
Pour les applications où l'utilisation de la mémoire est primordiale, la classe DirectBitmap
peut être adaptée pour utiliser des tableaux d'octets au lieu de tableaux d'entiers :
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
Avantages de la classe DirectBitmap :
LockBits
et réduit les frais généraux de collecte des ordures.Bitmap
standards.Considérations importantes :
DirectBitmap
instances pour libérer la mémoire épinglée.Comparaison des références de performances
Les tests de référence démontrent clairement les performances supérieures de DirectBitmap
par rapport aux méthodes traditionnelles SetPixel
/GetPixel
et LockBits
:
<code>| Method | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 | |--------------|---------|----------|----------|-----------|------------|------------| | DirectBitmap | | | | | | |</code>
Conclusion
La classe DirectBitmap
offre une amélioration significative des performances par rapport aux méthodes traditionnelles de manipulation de bitmaps en C#. Son accès direct aux données brutes et son évitement des appels GetPixel
/SetPixel
en font un choix idéal pour les applications sensibles aux performances.
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!