3 번의 연속 촬영을하는 카메라 응용 프로그램을 만들려고합니다.android camera 클릭 연속 촬영
"takePicture"를 루프에 넣어 여러 번 호출하려고했습니다.
하지만 성공하지 못했습니다.
이 문제에 대해 도움을 받으십시오.
조금 도와 주시면 감사하겠습니다.
3 번의 연속 촬영을하는 카메라 응용 프로그램을 만들려고합니다.android camera 클릭 연속 촬영
"takePicture"를 루프에 넣어 여러 번 호출하려고했습니다.
하지만 성공하지 못했습니다.
이 문제에 대해 도움을 받으십시오.
조금 도와 주시면 감사하겠습니다.
코드에서 PictureCallback.onPictureTaken()
으로 전화하지 마십시오. 이 콜백은 준비가되면 Camera.takePicture()
에 대한 응답으로 시스템에서 데이터를 수신합니다.
후자 호출은 카메라를 열고 미리보기를 시작한 경우에만 성공합니다. 따라서 반복적으로 Camera.takePicture()
을 호출하면 작동하지 않습니다 (예 : Android 2.3.1 Camera takePicture() Multiple images with one button click 참조). 이를 처리하는 올바른 방법은 onPictureTaken()
에 샷 카운터를 유지하고 3보다 작 으면 카메라 미리보기를 다시 시작하고 또 다른 Camera.takePicture()
을 (동 기적으로) 발행하십시오. 그 후에 onPictureTaken()
은 return
이어야 다음 캡쳐 된 프레임을 처리 할 수 있습니다.
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());
}
}
};
나는 해결책을 얻었습니다.
내 루프에서 mCamera.startPreview();
으로 전화를 걸었습니다.
미리보기는 촬영해야하며 mCamera.startPreview();
은 (는) 내 실행을 차단하고있었습니다.
전화를 걸지 않아도되지만 전화를 걸기 때문에 콜백이라고합니다. "takePicture"를 호출하십시오. – Fildor
죄송합니다. 약간의 수정이 필요합니다. – Shivansh