2012-02-01 24 views
4

私はアンドロイド画面(私はアンドロイド画面で何をしているのか)をプログラム的に作りたいと思っています。Android画面画像から画像をキャプチャまたは作成する

これに関する最良のチュートリアルやヘルプはありますか? 私はたくさんの検索をしましたが、私はそのことを発見しました...(プログラマチックにアンドロイドの画面をキャプチャします)。 もし、私がたくさんのキャプチャされた画像をアンドロイドでプログラミングする方法よりも、毎ミリ秒後にたくさんの画像をキャプチャしても大丈夫です。

答えて

6

Androidでの画面キャプチャには次のコードを使用できます。

限り、あなたはあなたがJCodec(http://jcodec.org)を使用してビデオにそれを反転することができますビットマップを持っているように..... http://android-coding.blogspot.in/2011/05/create-custom-dialog-with-dynamic.html

+6

ようこそ!これは理論的に質問に答えるかもしれませんが、回答の重要な部分をここに含め、参考にするためのリンクを提供することが望ましいでしょう(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

をこのURLを参照してください。

次のサンプル画像エンコーダ: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()); 
} 

あなたにもフルAndroidのサポートを実装するためにJCodecチームを待つことができ、彼らはこれに応じてそれに取り組んでいる:http://jcodec.org/news/no_deps.html

+2

このコードは非常に遅いですか? fromBitmap()は、480x800の画像に対して約30〜40秒かかる。 JCodecのencodeNativeFrame()はさらに時間がかかります。ピクチャの代わりにビットマップを使用するためにJCodecの内部を再配線する方法はありますか? – BVB

関連する問題