C#中快速位圖處理
處理大型點陣圖時,逐像素存取和執行操作可能會影響效能。 C#內建的Bitmap.GetPixel()
和Bitmap.SetPixel()
方法雖然方便,但速度較慢。本文探討了將位圖快速轉換為位元組數組並轉換回位圖的替代方法,從而實現高效的像素操作。
點陣圖轉換為位元組數組
Marshal.Copy()
方法,您可以將像素資料從點陣圖緩衝區複製到位元組數組中。雖然封送處理不需要不安全程式碼,但它可能比LockBits方法略慢。 位元組數組轉換為點陣圖
Marshal.Copy()
方法將修改後的像素資料從位元組數組複製回點陣圖緩衝區。 效能比較
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>
封送處理方法範例
<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>
以上是如何在 C# 中有效率地操作點陣圖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!