使用Textureview.getBitmap()每秒从相机预览中抓取帧。 它完美地工作,除了它导致主Ui线程缓慢,有时甚至崩溃。 请问我需要做什么??谢谢
这是我的代码:
mCountDownTimer=new CountDownTimer(7000,500) {
@Override
public void onTick(long millisUntilFinished) {
Log.v("Log_tag", "Tick of Progress"+ i+ millisUntilFinished);
i++;
mProgressBar.setProgress(i);
Bitmap bmps = mTextureView.getBitmap();
ByteArrayOutputStream out = new ByteArrayOutputStream();
bmps.compress(Bitmap.CompressFormat.JPEG , 0, out);
rev.add(bmps);
}
@Override
public void onFinish() {
//Do what you want
i++;
mProgressBar.setProgress(i);
mCountDownTimer.cancel();
}
};
答案 0 :(得分:1)
bmps.compress方法将其结果写入out ByArrayOutputStream,并且它不会更改原始位图。所以,首先,你没有使用compress方法的结果,因为在bmps.compress调用之后你没有使用'out'变量。
我认为删除这两行:
ByteArrayOutputStream out = new ByteArrayOutputStream(); bmps.compress(Bitmap.CompressFormat.JPEG,0,out);
会产生与您现在相同的结果。
但除此之外,最好不要在UI线程上进行处理(如图像处理),这肯定会减慢应用程序的速度。解决这个问题的最简单方法是使用AsyncTask:
http://developer.android.com/reference/android/os/AsyncTask.html
尝试压缩AsyncTask的doInBackground方法中的位图,你的问题就会解决。