2014-10-19 90 views
0

您好我有一個應用程序使用SurfaceViews,我想顯示拍攝的照片的預覽圖像以及讓用戶重試拍照。我遇到的問題是,方法PictureCallback是一個匿名函數,因此我無法返回任何文件名或ID,讓我抓取圖片並將其與重試按鈕一起顯示在SurfaceView上。你知道我能做到嗎?在PictureCallback()函數在這裏:(我已經編輯原創,而不是保存到我保存到一個全局變量文件,這樣我可以通過我的CameraHelper對象日後訪問)如何在Android中使用ImageView拍攝照片後顯示拍攝的圖片並避免同步問題

// global variable to access the bitmap when the camera callback has finished processing. 
private bitmapPicture; 

方法拍攝照片:

public void takeThePicture(Camera mCamera) 
{ 
    Log.d("Camera Information","Taking the picture inside takeThePicture() method"); 

    // picture callback method is required to take a picture 
    Camera.PictureCallback mPicture = new Camera.PictureCallback() { 

     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      // Create a Bitmap picture that we can later access through other way. 
      bitmapPicture = BitmapFactory.decodeByteArray(data, 0, data.length); 
     } 
    }; 

    mCamera.takePicture(null,null,mPicture); 
} 

訪問的畫面一直在努力的唯一的問題是,它返回先前的畫面,我注意到這樣,所以訪問到bitmapPicture變量的時間同步問題以及數據被保存到其中的時間。

希望你能幫助我:) 謝謝!

回答

0

這是不可能的,因爲PictureCallback是異步(這就是爲什麼它是無效)。捕捉圖片可能需要幾百毫秒。

典型的解決方案是將消息發送到活動的處理程序,並讓該處理程序顯示圖像視圖。這意味着您的takePicture(Camera)方法不能是靜態,但可以訪問父活動或其處理程序。

+0

感謝您的答案亞歷克斯,我仍然不完全理解我將如何能夠溝通我的處理程序和我的活動。我的活動裏面有3個片段,其中一個有ImageView和我拍照的相機預覽。如果我正在使用CameraHelper對象,當圖片回調方法被調用時,如何能夠從我的CameraHelper對象訪問我的imageView?或者我會如何讓我的片段知道相機何時完成拍照?現在也不是用圖像創建文件,而是直接將數據發送到位圖以避免IO延遲問題 – 2014-11-18 07:41:46