2012-02-01 4 views
4

Я хочу сделать видео с экрана моего андроида (что я делаю на экране андроида) программно.Android Захват экрана или создание видео с изображений

Есть ли какой-либо лучший учебник или помощь по этому вопросу. Я много искал, но я нашел эту вещь ... (Захват изображения экрана Android в программном порядке). Хорошо, если я запечатлел много изображений после каждого миллисекунды, чем то, как я делаю видео с большим количеством захваченных изображений в программном обеспечении для Android.

ответ

6

Вы можете использовать следующий код для захвата экрана в Android.

Пожалуйста, просмотрите этот адрес ..... http://android-coding.blogspot.in/2011/05/create-custom-dialog-with-dynamic.html

+6

Добро пожаловать в Stack Overflow! Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить основные части ответа здесь и предоставить ссылку для справки. –

2

Вы можете использовать следующий код для захвата экрана в Android.

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

Для создания видеоролика из изображений посетите страницу this.

+0

Я сделал это .. Я хотите преобразовать эти изображения в виде видео. Любое предложение. –

+0

Вы проверили ссылку? Я обновил свой ответ – Lucifer

+0

что случилось? – Lucifer

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() заняло около 30-40 секунд, чтобы выполнить для изображения 480x800. Кодировка JCodecNativeFrame() занимает еще больше времени. Есть ли способ переустановить внутренние компоненты JCodec для использования растровых изображений вместо изображений? – BVB

Смежные вопросы