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 » ?

DDD
Libérer: 2025-01-19 02:27:08
original
548 Les gens l'ont consulté

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

Optimisation de la manipulation des bitmaps C# : alternatives aux lenteurs SetPixel et GetPixel

Présentation

Les méthodes intégrées GetPixel et SetPixel en C# pour la manipulation de bitmaps sont notoirement lentes, en particulier lorsqu'il s'agit d'images plus grandes. Cet article présente des alternatives supérieures pour des performances considérablement améliorées.

Alternatives hautes performances

Trois méthodes principales offrent des améliorations de vitesse substantielles par rapport aux fonctions standard :

  1. Classe DirectBitmap : Cette classe personnalisée fournit un accès direct et non géré aux données bitmap, éliminant ainsi la surcharge de verrouillage et de copie. Il propose des méthodes GetPixel et SetPixel pour une manipulation intuitive des pixels.

  2. Méthode LockBits : Cette méthode intégrée verrouille une section du bitmap en mémoire pour un accès direct à ses données brutes. Bien que plus rapide que SetPixel/GetPixel, il nécessite un verrouillage et un déverrouillage explicites, ce qui entraîne un faible coût en termes de performances.

  3. Blocs de code non sécurisés : Cette approche utilise des pointeurs non sécurisés pour la manipulation directe de la mémoire. Bien que potentiellement le plus rapide, il nécessite une manipulation minutieuse pour éviter la corruption de la mémoire ; cette méthode est la mieux adaptée aux développeurs expérimentés.

Références de performances

Les performances varient en fonction de la taille de l'image et de l'opération spécifique. Généralement, DirectBitmap surpasse LockBits et surpasse considérablement SetPixel/GetPixel pour les bitmaps plus grands. Le tableau suivant illustre les différences de performances :

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

Exemple de code : DirectBitmap

La classe DirectBitmap simplifie l'accès aux pixels :

<code class="language-csharp">public void SetPixel(int x, int y, Color colour)
public Color GetPixel(int x, int y)</code>
Copier après la connexion

Exemple d'utilisation :

<code class="language-csharp">var dbm = new DirectBitmap(width, height);
dbm.SetPixel(x, y, Color.Red);
Color c = dbm.GetPixel(x, y);</code>
Copier après la connexion

Conclusion

Pour des performances optimales avec de grands bitmaps, la classe DirectBitmap fournit une solution convaincante, offrant des améliorations de vitesse significatives par rapport aux méthodes traditionnelles. LockBits présente un compromis équilibré entre vitesse et facilité d'utilisation, tandis qu'un code dangereux, bien que potentiellement le plus rapide, exige une mise en œuvre minutieuse.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal