当前位置: 首页 > 知识库问答 >
问题:

Android从图像列表制作动画视频

阎兴为
2023-03-14

共有1个答案

蔺德曜
2023-03-14

Android不支持AWT的BufferedBitmap和AWTUtil(即Java SE)。目前,带有SequenceEncoder的解决方案已经集成到JCodec的Android版本中。您可以从包org.jcodec.api.SequenceEncoder中使用它。

下面是使用JCODEC从一系列位图生成MP4文件的解决方案:

try {
    File file = this.GetSDPathToFile("", "output.mp4");
    SequenceEncoder encoder = new SequenceEncoder(file);

    // only 5 frames in total
    for (int i = 1; i <= 5; i++) {
        // getting bitmap from drawable path
        int bitmapResId = this.getResources().getIdentifier("image" + i, "drawable", this.getPackageName());
        Bitmap bitmap = this.getBitmapFromResources(this.getResources(), bitmapResId);
        encoder.encodeNativeFrame(this.fromBitmap(bitmap));
    }
    encoder.finish();
} catch (IOException e) {
    e.printStackTrace();
}

// get full SD path
File GetSDPathToFile(String filePatho, String fileName) {
    File extBaseDir = Environment.getExternalStorageDirectory();
    if (filePatho == null || filePatho.length() == 0 || filePatho.charAt(0) != '/')
        filePatho = "/" + filePatho;
    makeDirectory(filePatho);
    File file = new File(extBaseDir.getAbsoluteFile() + filePatho);
    return new File(file.getAbsolutePath() + "/" + fileName);// file;
}

// convert from Bitmap to Picture (jcodec native structure)
public Picture fromBitmap(Bitmap src) {
    Picture dst = Picture.create((int)src.getWidth(), (int)src.getHeight(), ColorSpace.RGB);
    fromBitmap(src, dst);
    return dst;
}

public void fromBitmap(Bitmap src, Picture dst) {
    int[] dstData = dst.getPlaneData(0);
    int[] packed = new int[src.getWidth() * src.getHeight()];

    src.getPixels(packed, 0, src.getWidth(), 0, 0, src.getWidth(), src.getHeight());

    for (int i = 0, srcOff = 0, dstOff = 0; i < src.getHeight(); i++) {
        for (int j = 0; j < src.getWidth(); j++, srcOff++, dstOff += 3) {
            int rgb = packed[srcOff];
            dstData[dstOff]     = (rgb >> 16) & 0xff;
            dstData[dstOff + 1] = (rgb >> 8) & 0xff;
            dstData[dstOff + 2] = rgb & 0xff;
        }
    }
}

如果您需要更改fps,您可以自定义SequenceEncoder。

 类似资料:
  • 动画控制器视图 动画控制器视图允许你创建、查看和修改动画控制器资源。 动画控制器视图显示了一个新的空动画控制器资源 动画控制器视图主要有两部分:网格布局主体区域,左侧的分层和参数面板。 动画控制器视图的布局区域 深灰色网格部分是主体布局区域。你可以在这里创建、排列和连接 动画控制器 的状态(即动画剪辑)。 可以在网格上右键点击创建一个新的状态节点。使用鼠标中键拖动,或拖动时按住 Alt/Optio

  • 我有一个android布局,它有一个,里面有很多元素。在的底部有一个,然后由适配器填充。 我遇到的问题是,android将从中排除,因为已经具有可滚动的功能。我希望与内容一样长,并且主滚动视图是可滚动的。 我怎样才能达到这种行为呢? 下面是我的主要布局: 然后以编程方式将组件添加到具有ID:的linearlayour中。下面是加载到LinearLayout中的一个视图。就是这个给我卷轴带来麻烦的。

  • 我用ffmpeg库为android转换了一个图像到mp4视频,但这需要太长时间,我想避免第三方库,如果可能的话。请帮我解决我的问题。 谢谢你。

  • 当发生滚动时,我试图将< code>ListView项目动画化。更具体地说,我正试图模仿iOS 7上iMessage应用程序的滚动动画。我在网上找到一个类似的例子: 为了澄清,我试图在用户滚动时实现对项目的“流体”移动效果,而不是在添加新项目时实现动画。我试图修改我的中的视图,并且我已经研究了源代码,看看我是否可以以某种方式在某个地方附加一个,该器可以调整发送到子视图的绘制坐标(如果这是的设计方式

  • 当前为 5.4 版本,稍后将升级到 5.5。在 5.5 中,本节内容被拆分成了多个小节。 使用动画视图 在 Unity 中,动画视图用于预览和编辑游戏对象的动画剪辑。动画视图可以通过菜单 Window -> Animation 打开。 查看游戏对象上的动画 动画视图和层级视图、场景视图以及检视视图紧密耦合。类似于检视视图,动画视图将显示当前选中对象的动画的时间轴和关键帧。你也可以在层级视图或场景视