提高 C# Windows 窗体中的位图操作速度:SetPixel 和 GetPixel 的替代方案
SetPixel
和 GetPixel
在 C# Windows 窗体应用程序中进行位图操作是出了名的慢。 本文探讨了高性能替代方案。
DirectBitmap 类:一种高级方法
DirectBitmap
类提供对位图数据的直接访问,绕过 LockBits
和 SetPixel
的性能开销:
<code class="language-csharp">public class DirectBitmap : IDisposable { // ... public void SetPixel(int x, int y, Color colour) { int index = x + (y * Width); int col = colour.ToArgb(); Bits[index] = col; } public Color GetPixel(int x, int y) { int index = x + (y * Width); int col = Bits[index]; Color result = Color.FromArgb(col); return result; } // ... }</code>
这种直接内存操作显着减少了内存分配,从而加快了处理速度。
带字节的原始像素数据:更快
为了获得最终速度,请使用字节而不是整数表示像素数据:
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
每个像素现在使用 4 个字节 (ARGB)。 请记得相应地调整 SetPixel
和 GetPixel
。
DirectBitmap 的优点:
Dispose()
进行高效内存管理。注意事项:
Graphics
对象无缝集成。性能基准:
性能测试证明了DirectBitmap
的明显优势:
Method | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 |
---|---|---|---|---|---|---|
DirectBitmap | 2 | 28 | 668 | 8219 | 178639 | |
LockBits | 2 | 3 | 33 | 670 | 9612 | 197115 |
SetPixel | 45 | 371 | 5920 | 97477 | 1563171 | 25811013 |
通过实施这些优化技术,C# 开发人员可以显着提高 Windows 窗体应用程序中位图操作的效率。
以上是除了 SetPixel 和 GetPixel 之外,如何提高 C# Windows 窗体应用程序中的位图操作性能?的详细内容。更多信息请关注PHP中文网其他相关文章!