4

假设我需要制作几个全屏动画,每个动画大约包含 500 帧。动画应该以合理的速度播放 - 应该不会低于 20fps - 并且图片应该具有合理的质量,而不是过度压缩。

你认为我应该使用什么方法?

到目前为止,我尝试过:

1. storing each frame as a compressed JPEG
2. before animation starts, loading each frame into a byteArray
3. as the animation plays, decode corresponding byteArray into a bitmap
and draw it on a surface view.

问题 - 速度太低,通常约为 5-10 FPS。

我想到了另外两个选择。

  1. 将所有动画转换为一个电影文件...但我想在开始、暂停和寻找完全正确的帧时可能存在问题...您怎么看?

  2. 我想到的另一个选择是使用 OPENGL(虽然我以前从未使用过它),逐帧播放动画。你怎么看,opengl 能够处理它吗?

谢谢!


编辑,我设法窥视talktom,发现它包含大约20megs压缩良好的JPEG,就像这样。

在此处输入图像描述

4

3 回答 3

3

你可以用几种不同的方式来处理它。

  1. 听起来解码是你的瓶颈。您可以尝试在播放动画之前完成包括解码在内的所有 3 个步骤,因此您只需绘制已经转换的位图。

  2. OpenGL 绝对可以胜任这项任务,因为它可能永远不会成为您的瓶颈。但如上所述,绘图似乎不是问题。

  3. 在设备上制作动画。如果您正在为几何对象或像素图制作动画,并且动画具有可以重复使用的共同背景,请将动画分成“演员”并四处移动 - 这将需要更少的数据。

编辑:移动设备上的复杂动画很少是全屏电影或一系列图像 - (冗余)数据量将是压倒性的(正如您已经注意到的那样)。它们是动画 2D 和 3D 模型。对于 3D,建议使用 OpenGL,对于 2D,普通的画布绘图可能就足够了。为了提高效率,您可以将模型拆分为单独的部分并分别为它们设置动画(看起来类似于 SouthPark 动画)。您可以将此与使用 spritesheets(如单独的小电影片段)结合起来为单独的部分设置动画。这将为您提供更大的灵活性,同时仍然使用比压缩电影更少的数据。

于 2012-11-12T11:37:10.447 回答
2

我真的认为你需要把它变成一个电影文件——这会给你一些适当的压缩,android 可以用媒体播放器完成所有的工作。我相信获得正确的帧是相当容易的,但您可能必须在视频流上使用较低的压缩来完成这项工作。

于 2012-11-12T11:35:15.787 回答
1

也许使用通用补间引擎可以解决您的性能问题。

于 2012-11-12T11:36:28.443 回答