我正在尝试制作可以连续拍摄 3 张照片的相机应用程序。
我试图通过将它放在一个循环中来多次调用“takePicture”。
但没有成功。
请帮助解决这个问题。
一点帮助将不胜感激。
我正在尝试制作可以连续拍摄 3 张照片的相机应用程序。
我试图通过将它放在一个循环中来多次调用“takePicture”。
但没有成功。
请帮助解决这个问题。
一点帮助将不胜感激。
你永远不应该PictureCallback.onPictureTaken()
从你的代码中调用;此回调在准备好时从系统接收数据,作为对 的响应Camera.takePicture()
。
仅当打开相机并开始预览时,后一个调用才会成功。因此,简单地Camera.takePicture()
在循环中调用是行不通的(参见例如Android 2.3.1 Camera takePicture() Multiple images with one button click)。处理此问题的正确方法是在您onPictureTaken()
的Camera.takePicture()
. 在此之后,onPictureTaken()
应该return
允许处理下一个捕获的帧。
我得到了解决方案。
我在循环中调用mCamera.startPreview();
。
预览是必须要拍的,不包括mCamera.startPreview();
被挡住我的执行。
我在做 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());
}
}
};