【问题标题】:Bitmap.SetPixel(x,y, Color) too slowBitmap.SetPixel(x,y, Color) 太慢
【发布时间】:2009-09-29 00:30:46
【问题描述】:

所以目前我正在创建一个 1000x1000 位图,它只需调用 Bitmap.SetPixel() 函数就花费了大约 0.3 秒。

我实际上只绘制了大概 50% 的像素,所以它更像是对 setpixel 的 500,000 次调用。虽然这看起来确实有很多电话,但 OTOH 视频游戏做得更多,并推动了更多像素(其中一些是通过程序生成的)。

显然 Bitmap.SetPixel 并未针对速度进行优化,但如果我需要以每秒 20-30 次的速度更新位图以获得良好的动画效果,那么这会很慢,那么我有什么选择?

【问题讨论】:

  • 我会使用您自己的缓冲区,然后将其“blit”到位图。抱歉,我自己实际上并不知道代码解决方案,但我不会在每个像素上设置像素,我会写入自己的缓冲区(或访问其缓冲区)

标签: .net bitmap


【解决方案1】:

Bob Powell 在直接访问内存中的像素图方面拥有出色的 tutorial

【讨论】:

  • 谢谢,这正是我想要的。
  • 这对我也有帮助。关键是使用Bitmap.LockBits、Bitmap.UnlockBits。
  • 该链接是不推荐的恶意软件和垃圾邮件网站!
  • 完成:网络存档以替换恶意软件站点。
【解决方案2】:
【解决方案3】:

现代大片视频游戏在硬件的幕后完成所有像素设置;它们为硬件提供了几何形状的缓冲区,而高度并行化的硬件则完成了所有的数学运算。 OpenGL 和 DirectX 是用于与硬件对话的 API。

搜索 gamedev.net 获取一些教程。

【讨论】:

    【解决方案4】:

    我可以推荐FastBitmap

    FastBitmap fb = new FastBitmap(b);
    fb.LockImage();
    
    ...
    
    fb.SetPixel(x, y, Color.Red);
    
    ...
    
    fb.UnlockImage();
    

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 1970-01-01
      • 2020-06-26
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多