Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mempercepat Manipulasi Peta Bit dalam C# Menggunakan Tatasusunan Byte?

Bagaimanakah Saya Boleh Mempercepat Manipulasi Peta Bit dalam C# Menggunakan Tatasusunan Byte?

Susan Sarandon
Lepaskan: 2025-01-21 13:31:09
asal
846 orang telah melayarinya

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

Meningkatkan Kelajuan Pemprosesan Peta Bit dalam C#

Manipulasi piksel langsung dalam C# Bitmaps menggunakan GetPixel() dan SetPixel() boleh menjadi perlahan. Untuk pemprosesan yang jauh lebih pantas, menukar Peta Bit kepada tatasusunan bait menawarkan kelebihan prestasi dengan menyediakan akses terus kepada data piksel.

Penukaran Tatasusunan Bitmap ke Byte

Kaedah ini menukar Peta Bit dengan cekap kepada tatasusunan bait yang mewakili data RGBA bagi setiap piksel:

<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>
Salin selepas log masuk

Susun Bait ke Pembinaan Semula Peta Bit

Fungsi ini membina semula Peta Bit daripada tatasusunan bait:

<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>
Salin selepas log masuk

Pemahaman LockBits dan Marshal.Copy

LockBits() menjamin data piksel Bitmap dalam ingatan untuk akses terus. Marshal.Copy() memudahkan pemindahan data yang cekap antara ruang memori terurus (C#) dan tidak terurus (memori Bitmap).

Marshaling lwn. Kod Tidak Selamat

Walaupun kod tidak selamat menawarkan pelaksanaan yang berpotensi lebih pantas, ia memerlukan pengendalian yang teliti. Marshaling menyediakan alternatif yang lebih selamat, walaupun dengan potensi kecil pertukaran prestasi. Pilihan terbaik bergantung pada keperluan khusus projek anda dan toleransi risiko.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mempercepat Manipulasi Peta Bit dalam C# Menggunakan Tatasusunan Byte?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan