Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memanipulasi Peta Bit dengan Cekap dalam C#?
Pemprosesan bitmap pantas dalam C#
Apabila bekerja dengan peta bit yang besar, mengakses dan melaksanakan operasi pada asas piksel demi piksel boleh menjejaskan prestasi. Kaedah Bitmap.GetPixel()
dan Bitmap.SetPixel()
terbina dalam C# adalah mudah tetapi perlahan. Artikel ini meneroka cara alternatif untuk menukar peta bit kepada tatasusunan bait dengan cepat dan kembali kepada peta bit, membolehkan operasi piksel yang cekap.
Tukar bitmap kepada tatasusunan bait
Marshal.Copy()
anda boleh menyalin data piksel daripada penimbal peta bit ke dalam tatasusunan bait. Walaupun marshaling tidak memerlukan kod yang tidak selamat, ia mungkin lebih perlahan daripada kaedah LockBits. Tukar tatasusunan bait kepada peta bit
Marshal.Copy()
untuk menyalin data piksel yang diubah suai daripada tatasusunan bait kembali ke penimbal peta bit. Perbandingan prestasi
Contoh kaedah LockBits
<code class="language-csharp">using System; using System.Drawing; using System.Runtime.InteropServices; public unsafe class FastBitmap { public static Image ThresholdUA(float thresh) { Bitmap b = new Bitmap(_image); BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat); byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat); byte* scan0 = (byte*)bData.Scan0.ToPointer(); for (int i = 0; i < ... }</code>
Contoh kaedah marshaling
<code class="language-csharp">using System; using System.Drawing; using System.Runtime.InteropServices; public class FastBitmap { public static Image ThresholdMA(float thresh) { Bitmap b = new Bitmap(_image); BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat); byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat); int size = bData.Stride * bData.Height; byte[] data = new byte[size]; Marshal.Copy(bData.Scan0, data, 0, size); for (int i = 0; i < ... }</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanipulasi Peta Bit dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!