【问题标题】:Better frame rate drawing bitmaps in a Canvas (Part 2)?更好的帧率在画布中绘制位图(第 2 部分)?
【发布时间】:2011-06-02 04:44:53
【问题描述】:

这就是我想要做的事情:我正在尝试加载一系列位图来显示动画。这意味着我需要下降 fps(24 fps)。我需要加载不超过 10 秒的动画或大约 300 个位图。由于它是动态壁纸,因此我只能手动绘制每一帧。

到目前为止,这是我尝试过的:

  1. 显而易见的策略:每帧加载每个位图并绘制它。这很慢。
  2. 使用缓存。我将位图加载放在一个单独的线程中。大约 20 个位图的缓存在后台持续加载。但是,我的性能仍然很差(大约 10 fps)。罪魁祸首是位图加载缓慢。
  3. 我打算尝试使用 OpenGL,但后来我意识到即使使用 OpenGL,缓慢的位图加载仍然是一个问题。正确的? (还是我错了?)

那么我还可以使用哪些其他策略?

这是我的想法:如果我使用 openGL,我可以使用更小的位图(因为它可以提供更好的缩放比例)。也许那时我可以有一个更大的缓存——比如 3 秒。使用更大的缓存,缓慢的位图加载不会成为问题,对吧?

还有其他策略吗?


哦,这是我当前的位图加载功能:

void loadNthBitmap(int i, int n) {
    try {
    buf = new 
        BufferedInputStream(assets.
                open(folder+"/"
                     +imageList[n])
                );
    tmpBitmap = BitmapFactory.
        decodeStream(buf);
    rbitmap[i] = Bitmap.createBitmap
        (tmpBitmap,
         0,0,imageWidth,imageHeight,
         transMatrix,false);
    }
    catch(IOException e) {}
}

其中imageList 是预定义的资产列表,transMatrix 是旋转和缩放矩阵。

【问题讨论】:

    标签: android animation opengl-es bitmap live-wallpaper


    【解决方案1】:

    您想要做的事情(即全帧动画)并不容易。几乎所有的 Android 动画(从 SDK 中的月球着陆器示例到愤怒的小鸟)都包含在相对静态的背景上移动小精灵。

    解决您的问题的“明显”解决方案是将您的动画转换为 mpeg,然后将其解码为视频动态壁纸,复制此人在此处采用的方法:http://forum.xda-developers.com/showthread.php?t=804720(替代链接 http://android.ccpcreations.com/vlw/

    【讨论】:

    • 这是一个开始。按照 RockPlayer 的方法,我的测试视频获得了大约 10 fps 的速度。这种方法使用 FFmpeg、NDK 和 OpenGL 纹理。可能,我应该使用帧缓冲区。
    • @u-avalos 感谢您的接受/支持。你显然是一个非常认真的程序员。祝你的项目好运。 :-)
    • @u-avalos 在此处的常见问题解答android.ccpcreations.com/vlw/vlw-faq 中,VLW 家伙声称 ~24 fps @ 480x854,并有一些编解码器建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多