3

canvasとSurfaceViewでペイントアプリを開発しており、ユーザーの操作を記録したり、動画を生成したりしたいです。

この瞬間、私はしようとしています:

public static Bitmap captureView(View v) {
    Log.v(CAPTURE_TAG, "init");
    v.setDrawingCacheEnabled(true);
    v.buildDrawingCache(true);
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
    //v.destroyDrawingCache();
    v.setDrawingCacheEnabled(false); // clear drawing cache
    Log.v(CAPTURE_TAG, "Fin:");
    return b;
}

タイマーを使用して 50 ミリ秒ごとにこれを呼び出し、AsynkTask で AsynTask、onPostExecute メソッドを使用して、ビットマップを外部ストレージに保存します。

public class takeCaptureTask extends AsyncTask<View, Void, Bitmap> {

    @Override
    protected void onPostExecute(Bitmap result) {
        Log.v("taskCapt", "Fin - InitSave");
        new saveCaptureTask().execute(result);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Log.v("taskCapt", "init");
    }

    @Override
    protected Bitmap doInBackground(View... params) {
        return Utils.captureView(params[0]);
    }
}

最後に、NDK と ffmpeg を使用してビデオを生成します。

私の問題はパフォーマンスです。これを使用すると、すべてのスクリーンショットに 200 ミリ秒 (5 FPS) かかり、少なくとも 15 FPS が必要です。

私の質問は次のとおり
です。
2- 他の方法でキャンバスのスクリーンショットを撮ることはできますか?
3- root なしで NDK からスクリーンショットを撮ることは可能ですか? この場合、どのように?
4- NDK を使用して外部ストレージにデータを保存する方が高速ですか?
5-後で処理するために大量の画像をバッファリングする方法は?

私の悪い英語をお詫びします。

助けてくれてどうもありがとう!

4

1 に答える 1

0

これは、あなたがどのように描いているかによって異なります。Bitmap と Canvas を描画バッファーとして実際に使用できます。これは非常に簡単にキャプチャできます。ビューに変更があった場合にのみスクリーン キャップを行うなど、これを行うには非常に多くの方法があります。

于 2012-10-25T20:02:52.573 に答える