【问题标题】:Is there an efficient way to draw 30 bitmaps per second in windows forms?有没有一种有效的方法可以在 Windows 窗体中每秒绘制 30 个位图?
【发布时间】:2021-05-13 00:29:59
【问题描述】:

我现在正在从事一个有生以来第一次的科学项目,而且从来没有处理过效率问题。现在我有一个大问题,我必须绘制的热图的所有计算都可以完美地工作,但是位图抽屉无法处理将 30 个位图绘制到图片框上。
有谁知道不同的绘制方式位图?它不一定是图片框。
我知道有类似的问题,但它们都不适用于 windows 窗体(我不得不选择 windows 窗体而不是 WPF,因为这里需要很长时间才能解释的原因)。
这是我关于堆栈溢出的第一篇文章,如果我犯了错误,请原谅。
提前感谢您的帮助。
乔纳森

编辑: 该应用程序是为处理 200Hz 的实时数据而构建的,因为大多数屏幕显然无法处理这一点,我仅显示 30 FPS 并以 200Hz 记录日期,也是为了弥补性能问题,但性能仍然很差。如果我有更好的显示帧的方式,我可能会选择大约 60 FPS - 120 FPS。
这些图像都像视频的单帧和 2x 500px900px 像素大(2 因为我同时有两个传感器,它们都为完整的热图提供数据)。我使用skiasharp 创建位图,因为我听说这是最有效的方法。
我希望我回答了所有被问到的问题。

【问题讨论】:

  • 在内存中的位图上绘制而不是直接绘制到 PictureBox。然后将完成的图像分配给PictureBox。
  • 您也可以尝试研究像 SFML 这样的游戏引擎,它可以比普通的 WinForms 更快地绘制事物。作为一个附带问题,您如何创建位图。使用 Get-/SetPixel 还是使用 Graphics?
  • 您是在构建热图的一种动画,还是在显示单个图像、不同阶段、不同时间线(因此,不是可堆叠我>)?还是这 30 个位图代表 30 个动画?这些位图的大小是多少?你是怎么画它们的?为什么每秒 30 个?这是您正在处理的热图数量(30 个传感器),还是某种帧速率?即,缺少细节。
  • 感谢您的提示。我稍后会尝试并告诉你它们是否有效。

标签: c# performance winforms bitmap draw


【解决方案1】:

我已经在内存中绘制位图,但 Ken White 的提示让我想到了在分配之前将位图写入图像变量的想法,并且它的工作原因我不明白。一次绘图调用所需的时间减少了大约 50%。感谢您给 Ken White 的提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2011-08-26
    • 2010-09-10
    • 2022-12-21
    相关资源
    最近更新 更多