优化 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中文网其他相关文章!