我是一名开发绘画应用程序的人,使用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;
}
我使用定时器和AsynTask,每50毫秒调用一次该方法,并在AsynkTask中的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毫秒(5FPS),而我至少需要15 FPS。
我的问题是:
1- 我使用的方法正确吗?可以在没有root权限的情况下录制屏幕吗?
2- 是否可以使用其他方法对画布进行截图?
3- 是否可以在没有root权限的情况下从NDK中获取截图?如果可以,怎么做?
4- 使用NDK将数据保存到外部存储器是否更快?
5- 如何缓冲大量的图片以便稍后处理?
非常抱歉我的英语不好。
非常感谢您的帮助!