安卓屏幕截图或从图片制作视频

4

我想通过程序制作我的安卓屏幕(我在安卓屏幕上的操作)的视频。

有没有关于这方面的最佳教程或帮助? 我已经搜索了很多,但我只找到了这个东西...(通过程序捕获安卓屏幕图片)。 好吧,如果我每毫秒捕获很多图像,那么我如何通过程序在安卓中制作视频呢?

3个回答

6

6
欢迎来到Stack Overflow!虽然这理论上可以回答问题,但最好在此处包含答案的关键部分,并提供参考链接。 - Bill the Lizard

2
只要您有位图,就可以使用JCodec(http://jcodec.org)将其翻转为视频。
这里是一个示例图像序列编码器:https://github.com/jcodec/jcodec/blob/master/src/main/java/org/jcodec/api/SequenceEncoder.java。您可以通过将BufferedImage替换为Bitmap来修改它以适应您的目的。
请使用这些帮助方法:
public static Picture fromBitmap(Bitmap src) {
  Picture dst = Picture.create((int)src.getWidth(), (int)src.getHeight(), RGB);
  fromBitmap(src, dst);
  return dst;
}

public static 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;
    }
  }
}

public static Bitmap toBitmap(Picture src) {
  Bitmap dst = Bitmap.create(pic.getWidth(), pic.getHeight(), ARGB_8888);
  toBitmap(src, dst);
  return dst;
}

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

  for (int i = 0, dstOff = 0, srcOff = 0; i < src.getHeight(); i++) {
    for (int j = 0; j < src.getWidth(); j++, dstOff++, srcOff += 3) {
      packed[dstOff] = (srcData[srcOff] << 16) | (srcData[srcOff + 1] << 8) | srcData[srcOff + 2];
    }
  }
  dst.setPixels(packed, 0, src.getWidth(), 0, 0, src.getWidth(), src.getHeight());
}

您同样可以等待JCodec团队实现完整的Android支持,根据这个链接,他们正在努力做到这一点:http://jcodec.org/news/no_deps.html

2
这段代码是否应该运行得非常慢?fromBitmap() 函数执行一个 480x800 的图像大约需要 30-40 秒。JCodec 的 encodeNativeFrame() 函数执行时间更长。有没有办法重构 JCodec 的内部结构,使其使用 Bitmaps 而不是 Pictures? - BVB

1

你可以使用以下代码在Android中进行屏幕截图。

ImageView v1 = (ImageView)findViewById(R.id.mImage);
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();

如需从图像创建视频,请访问this链接。


我已经完成了这个任务,现在想把这些图片转换成视频。有什么建议吗? - Jaffar Raza
我无法从这些图像中创建MPEG 4或3GP文件。 - Jaffar Raza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接