【发布时间】:2009-06-04 12:39:17
【问题描述】:
我正在用 C# 编写一个像图片框一样工作的简单控件,除了图像不断向上滚动(并从底部重新出现)。动画效果由计时器 (System.Threading.Timer) 驱动,该计时器从缓存图像(分为两部分)复制到隐藏缓冲区,然后在其 Paint 事件中将其绘制到控件的表面。
问题在于,当以每秒 20+ 帧的高帧速率运行时,这种滚动动画效果会有些不稳定(在较低的帧速率下,效果太小而无法感知)。我怀疑这种抖动是因为动画没有以任何方式与我的显示器的刷新率同步,这意味着每一帧在屏幕上停留的时间是可变的,而不是正好 25 毫秒。
有什么办法可以让这个动画流畅滚动?
您可以下载一个示例应用程序here(运行它并单击“开始”),源代码为here。它看起来不是很生涩,但如果你仔细观察,你会发现打嗝。
警告:此动画会产生一种非常奇怪的视错觉效果,可能会让您感到有些不适。如果您观看一段时间然后将其关闭,它会看起来好像您的屏幕正在垂直拉伸。
更新:作为一个实验,我尝试用我的滚动位图创建一个 AVI 文件。结果没有我的 WinForms 动画那么生涩,但仍然无法接受(而且观看时间过长仍然让我感到恶心)。我认为我遇到了与刷新率不同步的根本问题,所以我可能不得不坚持让人们对我的外表和个性感到厌恶。
【问题讨论】:
-
您好,您是否设法解决了 GDI 的问题,或者您是否转而使用 WPF?您能否告知您是如何进行的,以便其他面临同样问题的人可以从您的经验中受益。