2016-02-21 42 views
1

我正在使用Android Developers Samples的相機代碼在預覽中獲取圖像的一部分,並對其執行一些處理。從TextureView獲取圖像的一部分

我想從預覽的[0,0]到[99,99]中獲取一個正方形圖像,對其進行處理並在動態顯示在ImageView中。我試圖通過輸入以下代碼來獲取當前圖像:

final Activity activity = getActivity(); 
activity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
    final Bitmap originalBitmap = mTextureView.getBitmap(); 
    // more code here 
} 
}); 

at this part of the code。通過調用getBitmap(),它使應用程序非常慢。

有沒有一種有效的方式來以1:1的比例得到所需的方形部分?

我知道我可以用更小的尺寸調用getBitmap()並使其更快,但我想避免丟失數據。

+0

不要在UI線程上運行。使用'new Thread(new Runnable {...})'。或者asynctask以及 –

+0

@ v-kalyuzhnyu:通過這樣做,我得到以下錯誤_android.view.ViewRootImpl $ CalledFromWrongThreadException:只有創建視圖層次結構的原始線程可以在訪問mTextureView時觸及其views._。 –

回答

1

這是怎麼回事?

CustomView mTextureView = new CustomView(getApplicationContext()); 
new Task().execute(mTextureView.getBitmap()); 

,這是的AsyncTask

public class Task extends AsyncTask<Bitmap, Void, Void> { 

    public Task() { 

    } 

    @Override 
    protected Void doInBackground(Bitmap... objects) { 
     //... do stuff 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
    } 
}