首页 > 后端开发 > C++ > 除了 SetPixel 和 GetPixel 之外,如何提高 C# Windows 窗体应用程序中的位图操作性能?

除了 SetPixel 和 GetPixel 之外,如何提高 C# Windows 窗体应用程序中的位图操作性能?

Barbara Streisand
发布: 2025-01-19 02:36:08
原创
843 人浏览过

How Can I Improve Bitmap Manipulation Performance in C# Windows Forms Apps Beyond SetPixel and GetPixel?

提高 C# Windows 窗体中的位图操作速度:SetPixel 和 GetPixel 的替代方案

SetPixelGetPixel 在 C# Windows 窗体应用程序中进行位图操作是出了名的慢。 本文探讨了高性能替代方案。

DirectBitmap 类:一种高级方法

DirectBitmap 类提供对位图数据的直接访问,绕过 LockBitsSetPixel 的性能开销:

<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)。 请记得相应地调整 SetPixelGetPixel

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板