Maison >développement back-end >C++ >Comment puis-je accélérer la manipulation des bitmaps en C# au-delà de SetPixel et GetPixel ?

Comment puis-je accélérer la manipulation des bitmaps en C# au-delà de SetPixel et GetPixel ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-19 02:46:11609parcourir

How Can I Speed Up Bitmap Manipulation in C# Beyond SetPixel and GetPixel?

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 :

  • Élimine le besoin de LockBits et réduit les frais généraux de collecte des ordures.
  • Permet un accès direct aux données bitmap brutes.
  • Conserve les propriétés Bitmap standards.

Considérations importantes :

  • La mémoire épinglée reste immobile, ce qui peut avoir un impact sur l'efficacité du ramasse-miettes.
  • Toujours éliminer les 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn