如何修复 Android.harware.Camera 中的 setParameters 失败?
Posted
技术标签:
【中文标题】如何修复 Android.harware.Camera 中的 setParameters 失败?【英文标题】:How to fix setParameters Failed in Android.harware.Camera? 【发布时间】:2017-04-26 10:13:25 【问题描述】:嗨
我在多个设备上都收到此错误,
设置参数失败
...在 android 中创建相机应用时。
是什么导致了这个问题?
这是我目前在打开 camera
设置 Parameters
时所做的:
public void surfaceCreated(SurfaceHolder surfaceHolder )
try
camera = camera.open();
catch (Exception e)
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
try
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
catch (Exception e)
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2)
refreshCamera();
setDisplayOrientation();
Camera.Parameters parameters = camera.getParameters();
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setParameters(parameters);
camera.startPreview();
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder)
if (camera != null)
camera.stopPreview();
public void frontCamera(View view)
camera.stopPreview();
camera.release();
camera=null;
if (cameraId == 0)
try
camera = camera.open(1);
catch (Exception e)
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
android.hardware.Camera.Parameters parameters;
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
parameters = camera.getParameters();
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
cameraId = 1;
try
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
catch (Exception e)
+我尝试在互联网上进行研究,发现:
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
但仍然导致setParameters
错误...
【问题讨论】:
【参考方案1】: 您知道有问题的相机支持 FOCUS_MODE_CONTINUOUS_PICTURE 吗? 不能保证。检查getSupportedFocusModes()。如果您使用任何类型的不受支持的模式,相机可能会失败 setParameters。 您知道相机支持 20 帧速率吗?这不能保证。检查getSupportedPreviewFpsRange。同样,如果您使用不支持的帧速率值,相机可能无法设置参数。 正如 Jan 所说,startFaceDetection() 应仅在预览开始后调用。老实说,尽管无序执行此操作会导致 setParameters 错误,这有点令人惊讶。【讨论】:
【参考方案2】:您的方法startFaceDetection()
应该在预览开始后被调用,因为相机会通知Camera.FaceDetectionListener
预览帧中检测到的人脸。
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setParameters(parameters);
camera.startPreview();
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
【讨论】:
太棒了!但只是问,我应该使用 startPreview();和 camera.setParameters(parameters);里面 try and catch with like Exeption e 或 IOExeption e? 谢谢!给你! 它仍然有一些相同标题的错误......对不起,但这还没有解决cmy问题......但感谢您提供建议 好的,没问题,祝你好运! :)以上是关于如何修复 Android.harware.Camera 中的 setParameters 失败?的主要内容,如果未能解决你的问题,请参考以下文章