Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mempercepat Manipulasi Peta Bit dalam C# Menggunakan Tatasusunan Byte?
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>
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>
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!