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
Libérer: 2025-01-19 02:46:11
original
608 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal