Захват экрана Android или создание видео с изображений
4 Jaffar Raza [2012-02-01 09:33:00]
Я хочу сделать видео с моего экрана Android (что я делаю на экране Android) программно.
Есть ли лучший учебник или помощь в этом отношении. Я много искал, но я нашел эту вещь... (Зафиксируйте изображение экрана Android в программном плане). Хорошо, если я запечатлел много изображений после каждого миллисекунды, чем то, как я делаю видео с большим количеством захваченных изображений в программном обеспечении Android.
android screenshot
3 ответа
6 Решение Akhil [2012-03-20 15:02:00]
вы можете использовать следующий код для захвата экрана в Android.
Пожалуйста, просмотрите этот URL..... http://android-coding.blogspot.in/2011/05/create-custom-dialog-with-dynamic.html
2 Stanislav Vitvitskyy [2013-05-22 08:50:00]
Пока у вас есть растровые изображения, вы можете перевернуть его в видео с помощью 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