2013-10-22 120 views
2

我正在嘗試拍攝3張連續照片的相機應用程序。android camera點擊連續拍攝

我試圖通過將其放入循環中多次調用「takePicture」。

但沒有成功。

請幫忙解決這個問題。

有一點幫助將不勝感激。

+0

它被稱爲回調,因爲你不應該叫它,但讓它叫。調用「takePicture」。 – Fildor

+0

抱歉的問題需要一些更正。 – Shivansh

回答

3

你永遠不應該從你的代碼中調用PictureCallback.onPictureTaken();這個回調在準備就緒時接收來自系統的數據,作爲對Camera.takePicture()的響應。

如果打開相機並開始預覽,後面的調用將會成功。因此,只需在循環中調用Camera.takePicture()將不起作用(請參閱,例如Android 2.3.1 Camera takePicture() Multiple images with one button click)。處理這個問題的正確方法是在onPictureTaken()中保留一個處理鏡頭的計數器,如果小於3,則重新啓動相機預覽併發出(同步)另一個Camera.takePicture()。在此之後,onPictureTaken()應該return,以允許處理下一個捕獲的幀。

0

我在做PhotoBurst時就像這樣使用它。它也處理FRameLayout舉行預覽啓動PhotoBurst:

PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 
     FileOutputStream outStream = null; 
     try { 

      Parameters param = camera.getParameters(); 
      param.setPictureSize(640, 480); 
      camera.setParameters(param); 

      // Or write to sdcard 
      outStream = new FileOutputStream(String.format(
        Environment.getExternalStorageDirectory().getPath()+"/foto%d.jpg", 
        System.currentTimeMillis())); 

      outStream.write(data); 
      outStream.close(); 
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,       
        Uri.fromFile(Environment.getExternalStorageDirectory()))); 

      Log.i(TAG, "onPictureTaken - wrote bytes: " + data.length); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
     } 
     Log.d(TAG, "onPictureTaken - jpg"); 
     try { 
      stillCount++; 
      camera.startPreview(); 
      if (stillCount < 10) { 
       preview.mCamera.takePicture(shutterCallback, rawCallback, 
         jpegCallback); 
       if (stillCount == 9) { 
        frameLayout.setClickable(true); 
       } 
      } else { 
       stillCount = 0; 
       takePictureButton.setEnabled(true); 
       frameLayout.setClickable(true); 
      } 
     } catch (Exception e) { 
      Log.d(TAG, "Error starting preview: " + e.toString()); 
     } 
    } 
}; 
0

我得到了解決方案。

我打電話給mCamera.startPreview();不在我的循環中。

預覽是必須拍攝的,不包括mCamera.startPreview();阻止了我的執行。