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-後で処理するために大量の画像をバッファリングする方法は?
私の悪い英語をお詫びします。
助けてくれてどうもありがとう!