Maison > développement back-end > C++ > Comment puis-je améliorer les performances de manipulation des bitmaps dans les applications Windows Forms C# au-delà de SetPixel et GetPixel ?

Comment puis-je améliorer les performances de manipulation des bitmaps dans les applications Windows Forms C# au-delà de SetPixel et GetPixel ?

Barbara Streisand
Libérer: 2025-01-19 02:36:08
original
880 Les gens l'ont consulté

How Can I Improve Bitmap Manipulation Performance in C# Windows Forms Apps Beyond SetPixel and GetPixel?

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

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

Chaque pixel utilise désormais 4 octets (ARGB). N'oubliez pas d'ajuster SetPixel et GetPixel en conséquence.

Avantages de DirectBitmap :

  • Accès direct à la mémoire pour des performances supérieures.
  • Gestion efficace de la mémoire avec Dispose().
  • Pas besoin de blocs de code dangereux.

Points à noter :

  • La mémoire épinglée peut avoir un impact sur le garbage collection. À utiliser judicieusement pour les scénarios de performances critiques.
  • L'accès direct aux données bitmap permet une intégration transparente avec l'objet 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!

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