Graphics 如何实现高速动画?

Graphics 如何实现高速动画?,graphics,animation,directx,gdi,Graphics,Animation,Directx,Gdi,我正在尝试编写一个应用程序(winforms),它可以演示两种振荡颜色如何产生第三种颜色。为此,我需要能够切换两种颜色之间非常快(在>50 fps)。我真的希望在托管代码中实现这一点 现在我正在绘制两个小的矩形位图,两个位图的顶部都是纯色。在启用双缓冲功能的控件中使用带有两个内存位图的GDI+DrawImage并不能切断它,并导致高速闪烁/撕裂。连接到滑块的计时器触发切换 这是明智的做法吗 GDI和BitBLT会更好吗 WPF的性能更好吗 DirectX或者其他的呢 技术 我非常感谢您的反馈,蒂

我正在尝试编写一个应用程序(winforms),它可以演示两种振荡颜色如何产生第三种颜色。为此,我需要能够切换两种颜色之间非常快(在>50 fps)。我真的希望在托管代码中实现这一点

现在我正在绘制两个小的矩形位图,两个位图的顶部都是纯色。在启用双缓冲功能的控件中使用带有两个内存位图的GDI+DrawImage并不能切断它,并导致高速闪烁/撕裂。连接到滑块的计时器触发切换

  • 这是明智的做法吗
  • GDI和BitBLT会更好吗
  • WPF的性能更好吗
  • DirectX或者其他的呢 技术

  • 我非常感谢您的反馈,蒂亚

    > P>我从来没有运气好地使用GDI来做高速图形,所以我使用DirectX,但是MS已经放弃了对托管DirectX的支持,所以您可能需要在非托管C++中这样做。p>

    只需在C语言中编写控制器,那么就有一个非常薄的托管C++层,只调用具有DirectX支持的非托管C++ DLL。 您将需要获得计算机的独占控制权,以便没有其他应用程序可以真正使用cpu,否则您将发现您的帧速率可能会下降,或者至少不会出现非常一致的情况


    如果您使用的是较旧版本的DirectX,例如DirectX 9.0c,它可能仍然支持.NET,我使用它来获得大约70帧/秒的音乐程序帧速率。

    使用双缓冲方法应该可以避免闪烁(我这样说并不是说仅仅将渲染控件的DoubleBuffered属性设置为True——具有讽刺意味的是,这对闪烁没有任何影响)

    撕裂可以通过DirectX处理,但只有当您将帧速率与显示器的刷新率同步时才可以。这可能是不可能的,尤其是当您需要达到特定的帧速率(并且它恰好不是显示器的刷新率)时


    我认为WPF无法解决基本撕裂问题(但我可能错了).

    这将与GDI一起工作,但您无法控制闪烁,因此这是不可能的。Direct X可能会有很多额外的绒毛,仅用于显示两个不闪烁的图像。也许SDL工作得足够好?它是跨平台的,您可以用不到30行代码来编写此效果


    我忘记了SDL。肯定会测试这个,因为有.NET库可用。这可能只是解决方案。我多年来一直没有写C++(实际上是从大学开始)。如果我能用最少的C++代码来解决问题,那就太好了。不幸的是,如果你使用了一个新版本的DirectX,你会做更多的C++,所以只需查找我提到的版本。迟来的反馈,但是无论如何:这最终是解决方案,由于一些撕裂问题,我找不到一个快速解决SDL的方法。tX 9.0c版本,创建了一个winform控件,该控件实现了图形魔术。为了避免额外的DirectX安装,我只捆绑了应用解决方案中所需的MDX DLL。谢谢。