我正在使用我的自定义相机应用程序使用前置摄像头拍摄照片而不使用系统相机应用程序。但拍摄的照片非常暗,因此可以正常看到照片。
我的代码
mCamera = Camera.open(1);
Camera.Parameters params =mCamera.getParameters();
params.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT);
mCamera.setParameters(params);
拍照
if (mCamera != null) {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
mCamera.takePicture(null, mPictureCallback,
mPictureCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
提前致谢。请给我一些建议。任何帮助将不胜感激。
答案 0 :(得分:14)
要解决这个问题,您可以在一段时间后拍照。试试这个:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
camera.takePicture(null, null, cameraCallback);
}
}, 1000);
答案 1 :(得分:5)
我找到了以下解决方案,这对我有用
等待一段时间,即使用
捕获图像前500毫秒mCamera.takePicture(null, mPictureCallback,mPictureCallback);
答案 2 :(得分:0)
这个帖子中的所有答案都提到了一个任意的延迟,因为没有解决这个问题的根本原因。
Android手机中的相机在预览开始后和拍摄照片之前进行自动对焦活动。问题中的代码段提到在mCamera.takePicture(null, mPictureCallback,mPictureCallback);
之后立即致电mCamera.startPreview();
。
在自动对焦过程中拍摄照片会导致拍摄的图像出现曝光问题,从而导致照片变暗。答案中提到的延迟使安卓有时间完成自动对焦,拍摄的图像非常完美。对于每个设备而言可能并非如此,并且任意数字可能会导致某些设备出现故障。
我的建议是关注代码段 -
Camera.AutoFocusCallback autoFocusCallBack = new Camera.AutoFocusCallback();
static autoFocusCallBack(){
mCamera.takePicture(null, mPictureCallback,
mPictureCallback);
}
if (mCamera != null) {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
mCamera.autoFocus(autoFocusCallBack);
} catch (IOException e) {
e.printStackTrace();
}
}
此流程可确保在自动对焦回调中调用takePicture()
,这意味着自动对焦成功。这样可以获得具有适当曝光和亮度的正确图像。
这也将消除任意延迟。
阅读Camera.AutoFocus()
的{{3}}链接。
阅读Camera.takePicture()
的{{3}}链接。
阅读Camera.startPreview()
的{{3}}链接。