我需要制作几个逐帧动画,每个动画最多包含 150 个全屏、480x800、帧、压缩 JPEG。
AnimationDrawable 会在前 10 帧左右超出 vm 预算时自行挂起。
在计时器上加载新位图的 SurfaceView 的帧速率非常慢,可能低于 5 fps。
由于我是 OpenGL 的新手,我想问一下在我的情况下它是否正确?
谢谢!:)
编辑:
加载jpges
ByteArrayOutputStream stream = new ByteArrayOutputStream();
BitmapFactory.decodeResource(getResources(), R.drawable.y1).compress(Bitmap.CompressFormat.JPEG, 80, stream);
byeArr.add( stream.toByteArray() );
ByteArrayOutputStream stream = new ByteArrayOutputStream();
BitmapFactory.decodeResource(getResources(), R.drawable.y2).compress(Bitmap.CompressFormat.JPEG, 80, stream);
byeArr.add( stream.toByteArray() );
... and so on.
和玩
@Override
public void onTick(long millisUntilFinished) {
if ( i < byeArr.size() )
{
bitMap = BitmapFactory.decodeByteArray ( byeArr.get(i) , 0, byeArr.get(i).length );
}
但加载 25 帧大约需要 3-5 秒。也许有办法加快速度?还有一种方法可以查看我有多少可用内存,即我可以加载多少帧?
谢谢
edit2:实验发现可以保持350帧左右的数组,对于2个左右的全动画效果非常好。现在我只需要找到一种方法以某种方式将这些图片存储为字节,以便能够几乎实时加载它们,因为 decodeResource 有点慢。
编辑 3:在编辑 2 中,我确保可以在一个数组中存储大约 350 帧,这对于一个动画来说已经足够了。
因此,我可以将当前动画所需的帧加载到字节数组中并播放动画。
然而问题是加载帧
ByteArrayOutputStream stream = new ByteArrayOutputStream();
BitmapFactory.decodeResource(getResources(), R.drawable.y1).compress(Bitmap.CompressFormat.JPEG, 80, stream);
byeArr.add( stream.toByteArray() );
需要太长时间。所以我需要找到一种方法来加快速度。假设我需要将 jpegs 作为字节数组存储在 res 或 assets 中,你怎么看?