1

我们正在尝试创建文本动画,例如视频上的过渡和缩放。

我们无法获得平滑过渡,效果非常生涩。然后我们明白了亚像素渲染在 android 中是不可能的。我们能想到哪些替代方案?我们可以在 OpenGL 中解决这个问题吗?

好的......我想在我的问题中添加更多内容......我们实际上是在尝试在由本地播放器在表面视图上播放的视频之上实现文本动画。我们尝试使用 android Canvas API 来实现文本动画,以缩放、翻译等和绘制文本。这可行,但输出不是那么顺利。我们已经验证这不是性能问题。即使我们以超过 30fps 的速度刷新帧,也会看到抖动。

然后,我们尝试使用 android Views 来获取这些动画,并观察到打开硬件加速时动画非常流畅。但是,当硬件加速关闭时,即使是 android View 系统动画也无法提供高质量的缩放动画。这又不是性能问题,因为我们尝试将每一帧转储到位图中并在 PC 上检查每一帧。

因此,似乎在关闭硬件加速时用于在 Canvas 上绘制的 SKIA 图形库无法进行亚像素渲染或类似的东西。例如,当我运行慢比例动画(约 6 秒内约 0.15 的比例)时,比例更新在约 3 帧内发生 1 个像素。但是如果在硬件加速视图上运行相同的动画,每一帧都会更新一小部分像素,并且缩放动画看起来非常平滑。

我肯定可以在预览时使用视图动画。但我需要获取这些动画缓冲区并将它们与视频一起编码。在硬件加速开启的情况下,获取这些缓冲区的任何输入都会有所帮助。我尝试过绘图缓存,但这似乎是使用软件渲染管道而不是硬件绘制的。

4

1 回答 1

0

平滑过渡和生涩的动画与子像素渲染无关。

问题听起来像是您没有正确计时渲染功能。不要使用间隔计时器来触发帧的渲染。您应该将渲染和动画放入您的程序事件循环空闲处理程序中,并测量渲染一帧所需的时间。然后在那个时候推进动画。

于 2012-09-15T10:53:58.900 回答