我正在尝试进行连续拍摄3次的相机应用。
我试图通过把它放在一个循环中多次调用“takePicture”。
但没有成功。
请帮忙解决这个问题。
一点帮助将不胜感激。
答案 0 :(得分: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
,以允许处理下一个捕获的帧。
答案 1 :(得分:0)
我在做Photo Burst时就像这样使用它。它还处理持有预览的FRameLayout以启动Photo Burst:
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());
}
}
};
答案 2 :(得分:0)
我得到了解决方案。
我从我的循环中调用了mCamera.startPreview();
。
预览必须拍摄,不包括mCamera.startPreview();
阻止我执行。