Maison >développement back-end >C++ >Comment puis-je accélérer la manipulation des bitmaps en C# à l'aide de tableaux d'octets ?

Comment puis-je accélérer la manipulation des bitmaps en C# à l'aide de tableaux d'octets ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-21 13:31:09848parcourir

How Can I Speed Up Bitmap Manipulation in C# Using Byte Arrays?

Augmentation de la vitesse de traitement des bitmaps en C#

La manipulation directe des pixels dans les bitmaps C# à l'aide de GetPixel() et SetPixel() peut être lente. Pour un traitement beaucoup plus rapide, la conversion du Bitmap en tableau d'octets offre un avantage en termes de performances en fournissant un accès direct aux données de pixels.

Conversion de bitmap en tableau d'octets

Cette méthode convertit efficacement un Bitmap en un tableau d'octets représentant les données RGBA de chaque pixel :

<code class="language-csharp">public static byte[] BitmapToByteArray(Bitmap bitmap)
{
    BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
    int length = bData.Stride * bData.Height;
    byte[] data = new byte[length];
    System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, data, 0, length);
    bitmap.UnlockBits(bData);
    return data;
}</code>

Tableau d'octets vers reconstruction bitmap

Cette fonction reconstruit le Bitmap à partir du tableau d'octets :

<code class="language-csharp">public static Bitmap ByteArrayToBitmap(byte[] data, int width, int height)
{
    Bitmap bitmap = new Bitmap(width, height);
    BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
    System.Runtime.InteropServices.Marshal.Copy(data, 0, bData.Scan0, data.Length);
    bitmap.UnlockBits(bData);
    return bitmap;
}</code>

Compréhension LockBits et Marshal.Copy

LockBits() sécurise les données de pixels du Bitmap en mémoire pour un accès direct. Marshal.Copy() facilite un transfert de données efficace entre les espaces mémoire gérés (C#) et non gérés (mémoire Bitmap).

Marshaling vs code dangereux

Bien que le code non sécurisé offre une exécution potentiellement plus rapide, il nécessite une manipulation méticuleuse. Le marshaling offre une alternative plus sûre, bien qu’avec un compromis potentiel mineur en termes de performances. Le meilleur choix dépend des besoins spécifiques de votre projet et de votre tolérance au risque.

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