【问题标题】:C# redraw only foregroundC# 仅重绘前景
【发布时间】:2016-09-01 10:26:42
【问题描述】:

我正在从事一个大学项目(模拟),该项目需要为自定义 UserControl 绘制大量线条和对象。我目前的方法是使用Invalidate() 为每个刻度/更新循环重绘所有内容。但它确实需要很多时间来绘制(这会导致 FPS 非常低),尤其是当我需要绘制数千条线和矩形时。

那么我怎样才能只重新绘制在每个更新循环中移动的特定(一组)对象,并且只在需要时重新绘制其余的(很少更新的对象)?或者有没有其他方法可以优化我在这个问题中的绘制方式?

【问题讨论】:

  • 请谷歌 opengl 和 DirectX。 :)
  • 您的目标是什么:Winforms、WPF、ASP..? 总是正确标记您的问题! - 对于 Winforms see here!
  • @TaW 我的目标是winforms。标签已编辑。谢谢你的链接,我试试看

标签: c# winforms drawing draw


【解决方案1】:

我的想法如下:

将您的控件绘制到位图(或其他图像格式)上一次,然后保存该图像。然后在您的控件上显示该位图。 (假设您使用可以做到这一点的控件,即ImageBox,不确定什么最适合)。

每当您更新图形时,请跟踪控件的哪些部分可能已过时,然后仅重绘这些部分(仅绘制与该部分接触的对象),并从您保存的图像中复制其他部分。

显示(并保存)新图像。

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 2019-11-03
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多