我正在使用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;
}
我每隔50ms调用一次,使用定时器和AsynTask,在AsynkTask上on on 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生成视频。
我的问题是性能,使用这个,每个截图需要200ms(5FPS),而且我需要至少15 FPS。
我的问题是:
1-我是否以正确的方式在没有root的情况下进行屏幕录制?
2-我可以使用其他方法截取画布的截图吗?
3-这可以从没有root的NDK截取屏幕截图吗?在这种情况下,如何?
4-使用NDK将数据保存到外部存储的速度更快?
5-如何缓存大量图像以便以后处理它?
我对我英语不好的看法。
非常感谢你的帮助!
答案 0 :(得分:0)
这取决于你的绘画方式。您实际上可以使用Bitmap和Canvas作为绘制缓冲区,这将非常容易捕获。有很多方法可以做到这一点,包括如果视图中有变化,只需要屏幕上限