提高 C# 中的點陣圖處理速度
使用 GetPixel()
和 SetPixel()
在 C# 位圖中直接進行像素操作可能會很慢。 為了顯著加快處理速度,將點陣圖轉換為位元組數組可透過提供對像素資料的直接存取來提供效能優勢。
點陣圖到位元組數組的轉換
此方法有效地將 Bitmap 轉換為表示每個像素的 RGBA 資料的位元組陣列:
<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>
位元組數組到位圖重建
此函數從位元組數組重建位圖:
<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>
理解LockBits
和Marshal.Copy
LockBits()
將點陣圖的像素資料保護在記憶體中以便直接存取。 Marshal.Copy()
促進託管(C#)和非託管(點陣圖記憶體)記憶體空間之間的高效資料傳輸。
編組與不安全代碼
雖然不安全的程式碼可能提供更快的執行速度,但它需要細緻的處理。 編組提供了更安全的替代方案,儘管潛在的性能損失很小。最佳選擇取決於您專案的特定需求和風險承受能力。
以上是如何使用位元組數組加速 C# 中的點陣圖操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!