2014-08-29 334 views
0

我使用Textureview.getBitmap()从Camera预览中每秒抓取帧。 它完美的工作,除了它导致主Ui线程迟钝,有时甚至崩溃。 请我需要做什么做的?谢谢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(); 

      } 
     }; 

回答

1

的bmps.compress方法是写其结果到你出ByteArrayOutputStream,它不改变原位图。所以,首先,你没有使用compress方法的结果,因为你在bmps.compress调用之后没有使用'out'变量。

我认为除去以下两行:

ByteArrayOutputStream OUT =新ByteArrayOutputStream(); bmps.compress(Bitmap.CompressFormat.JPEG,0,out);

会产生与您现在一样的结果。

但除此之外,最好不要在UI线程上进行处理(如图像处理),它肯定会减慢应用程序的运行速度。要解决这个最简单的方法是使用的AsyncTask:

http://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask Android example

尽量压缩了的AsyncTask的doInBackground方法中的位图,您的问题将得到解决。

+0

Lemos你可以添加一个例子。谢谢 – 2014-08-30 04:11:46