2014-08-29 332 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