2012-02-01 50 views
4

我想以編程方式製作我的android屏幕(我在android屏幕上做什麼)的視頻。Android屏幕捕獲或從圖像製作視頻

有沒有關於此的最佳教程或幫助。 我搜查了很多,但我發現的東西......(以編程方式捕獲安卓屏幕圖片)。 好的,如果我在每毫秒後捕捉大量圖像,而不是在android程序化中如何製作大量捕捉圖像的視頻。

回答

2

您可以使用以下代碼在Android中進行屏幕截圖。

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

對於從圖像創建視頻訪問this鏈接。

+0

我已經這樣做了。我想要以視頻的形式轉換這些圖像。任何建議。 – 2012-02-01 06:47:06

+0

你檢查了鏈接嗎?我已經更新了我的回答 – Lucifer 2012-02-01 06:54:59

+0

發生了什麼事? – Lucifer 2012-02-01 08:26:06

2

只要你有使用JCodec(http://jcodec.org)位圖可以翻轉成視頻。

下面是一個示例圖像序列編碼器:https://github.com/jcodec/jcodec/blob/master/src/main/java/org/jcodec/api/SequenceEncoder.java。您可以通過用位圖替換BufferedImage來爲您的目的修改它。

使用這些輔助方法:

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圖像。 JCodec的encodeNativeFrame()花費的時間更長。有什麼方法可以重新連接JCodec的內部使用位圖而不是圖片? – BVB 2013-06-13 22:18:18