最佳化 C# 中的點陣圖操作:SetPixel 與 GetPixel 的進階替代方案
C# 的 SetPixel
和 GetPixel
方法對於點陣圖操作來說非常慢。本文提出了更快、更有效的替代方案。
SetPixel/GetPixel 效率低
以下程式碼舉例說明了 SetPixel
和 GetPixel
的傳統且低效使用:
<code class="language-csharp">// Inefficient code using SetPixel and GetPixel</code>
由於對 GetPixel
和 SetPixel
的大量調用,這種方法會產生巨大的開銷。
DirectBitmap 類別:高效能解決方案
一個高效的替代方案是 DirectBitmap
類,它提供對位圖原始資料的直接存取。這繞過了對 GetPixel
和 SetPixel
的需求,從而帶來了顯著的效能提升。 使用 DirectBitmap
繪製矩形的範例:
<code class="language-csharp">using (var g = Graphics.FromImage(dbm.Bitmap)) { g.DrawRectangle(Pens.Black, new Rectangle(50, 50, 100, 100)); }</code>
使用位元組數組進行記憶體最佳化
對於記憶體使用至關重要的應用程序,DirectBitmap
類別可以調整為使用位元組數組而不是整數數組:
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
DirectBitmap 類別的優點:
LockBits
的需要並減少了垃圾收集開銷。 Bitmap
屬性。 重要注意事項:
DirectBitmap
實例以釋放固定記憶體。 效能基準比較
基準測試清楚地證明了DirectBitmap
與傳統SetPixel
/GetPixel
和LockBits
方法相比的優越性能:
<code>| Method | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 | |--------------|---------|----------|----------|-----------|------------|------------| | DirectBitmap | | | | | | |</code>
結論
DirectBitmap
類比 C# 中的傳統點陣圖操作方法提供了顯著的效能改進。 它直接存取原始資料並避免 GetPixel
/SetPixel
調用,使其成為效能敏感應用程式的理想選擇。
以上是除了 SetPixel 和 GetPixel 之外,如何加快 C# 中的點陣圖操作速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!