我在 ActiveDocument.Characters 上有一个循环。
我已检索到文档区域的设备上下文句柄,并希望显示一个覆盖以从左到右逐行平滑地突出显示文本。
目标是实现流畅的动画效果,就像应用程序引导您以一定的速度阅读一样。
当然,循环本身并不平滑。对算法的任何建议。
动画有什么不流畅的地方?它的动画很漂亮。做得很好:)
如果您指的是绘制下一个矩形的方式,我相信(而且我可能是错的),这完全取决于this.RenderSpeed
. 值越小,动画越平滑。在当前代码中,它看起来最好this.RenderGuidePoint.Offset(1, 0);
在this.RenderGuidePoint.Offset(25, 0);
.
我不是图像专家,但这是我能想到的一个例子(虽然不是最好的例子)。想象一下您正在观看的电影,这完全取决于帧速率。如果 fps 超过正常人眼可以处理的速度,您会注意到图像显得更加突然(例如:当您使用 2X 或 4X 快进电影时)。同样,您在代码中使用的 .Offset() 越多,矩形的绘制看起来就越突然。
那么解决方案是什么?
由于我们不能对正在绘制的下一个矩形的“X”做太多事情,我们可以操纵 Timer 的时间间隔以实现更平滑的创建(重新绘制矩形)。出于测试目的,我对一些值进行了硬编码,并对输出感到满意。看看你是否也得到了我得到的结果。
private void ToolStripComboBoxSpeed_SelectedIndexChanged (object sender, System.EventArgs e)
{
this.RenderSpeed = (int) this.ToolStripComboBoxSpeed.SelectedItem;
Switch (this.RenderSpeed)
{
case 5: TimerGuide.Interval = 50; break;
case 10: TimerGuide.Interval = 40; break;
case 15: TimerGuide.Interval = 30; break;
case 20: TimerGuide.Interval = 20; break;
case 25: TimerGuide.Interval = 10; break;
}
}
private void PictureBox_Paint (object sender, System.Windows.Forms.PaintEventArgs e)
{
//
// '~~> Rest of the code remains same
//
//this.RenderGuidePoint.Offset(this.RenderSpeed, 0);
this.RenderGuidePoint.Offset(1, 0);
//
// '~~> Rest of the code remains same
//
}
高温高压