2013-10-22 1 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를 할 때 이와 같이 사용합니다. 또한 PhotoBurst를 시작하기 위해 미리보기를 유지하는 FRameLayout을 처리하고 있습니다.

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();은 (는) 내 실행을 차단하고있었습니다.