Android相机预览很暗

我正在尝试创build一个自定义相机应用程序。 我从这里跟随了Android Developer的例子,做了一些小小的调整。 不过,我的相机预览变得相当黑暗。 另一方面,股票相机给了一个更明亮的预览。

我已经尝试了几个设置,使其更好地工作,但似乎没有任何影响。 相关代码张贴在这里。

CameraActivity(主)

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); if(CameraHelper.checkCameraHardware(this)) { mHelper = new CameraHelper(this, getWindowManager().getDefaultDisplay()); } FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); mPreview = new CameraPreview(this, CameraHelper.camera); mPreview.setLayoutParams(new LayoutParams(CameraHelper.mSize.width, CameraHelper.mSize.height, Gravity.CENTER)); preview.addView(mPreview); } 

CameraHelper类 (初始化摄像头并设置默认参数)

  public CameraHelper(CameraListener listener, Display display){ mListener = listener; camera = getCameraInstance(); mParameters = camera.getParameters(); initCameraParameters(); mSize = getPreviewSize(display); mParameters.setFocusMode(Parameters.FOCUS_MODE_AUTO); mParameters.setPictureSize(2560, 1920); mParameters.setAutoExposureLock(false); mParameters.setAutoWhiteBalanceLock(false); mParameters.set("iso", "ISO800"); //Tried with 400, 800, 600 (values obtained from flatten()) mParameters.setColorEffect("none"); mParameters.setPictureSize(2560, 1920); mParameters.setPreviewFrameRate(20); mParameters.set("scene-mode", "auto"); mParameters.setFocusMode("auto"); mParameters.setExposureCompensation(4); camera.setParameters(mParameters); } 

相机将帧从上面的开发人员页面链接的示例发送到SurfaceHolder.Surface。

看到这里的区别: 股票相机应用程序 股票相机预览 我的相机应用程序 我的相机应用程序

尝试设置ISO等基于来自相机的upack参数张贴在这里。 它仍然没有工作。

参数(16369):效果值=无,单色,负片,深褐色,浅绿色,锐化,紫色,绿色,蓝色,粉红色,黄色,红色,单色,古董;曝光补偿步数= 0.5 ;焦距= 3.43;对焦区=(0,0,0,0,0);对焦距离= 0.10,1.20,无穷远;将对焦模式值=汽车,macros,facedetect; GPS海拔= 0 ; GPS纬度= 0; GPS的经度= 0; GPS处理法=全球定位系统; GPS时间戳= 0;水平视angular= 51.2; ISO =汽车;异值=汽车,ISO50,ISO100,ISO200 ,ISO400,ISO800,ISO1600; JPEG-质量= 1; JPEG缩略图高度= 480; JPEG缩略图大小的值= 640×480,0x0; JPEG缩略图宽度= 640;最大曝光补偿= 4;最大-num-聚焦区域= 1;最大变焦= 12;最小曝光补偿= -4;画面格式= JPEG;画面格式值= JPEG;图像尺寸值= 2560×1920,2560×1536,2048×1536, 2048×1232,1600×1200,1600×960,800×480,640×480;预览格式= yuv420sp;预览格式值= yuv420sp;预览FPS-范围= 15000,30000;预览FPS-范围值=(15000,30000);预览 – 帧速率= 30;预览帧率值= 30;预览大小640×480 =;预 视图大小值= 1280×720,800×480,720×480,640×480,352×288;旋转= 0;场景模式=自动,场景模式值=自动,肖像,风景,夜景,海滩,雪景,夕阳,烟火,运动,方,烛光,ASD,背光源,黄昏黎明,文本,水落颜色;垂直视angular= 39.4;video帧格式= yuv422i-YUYV;最大光圈值=汽车,白炽灯,荧光灯,日光,cloudy-日光;变焦= 0;变焦比= 100,125,150,175,200,225,250,275,300,325,350,375,400;放大支持= TRUE;将对焦模式自动=;图像尺寸= 2560×1920;曝光补偿= 4;

编辑:根据下面的评论进一步testing,似乎只是预览,比它应该是黑暗的。 实际拍摄的图像是光线充足,曝光补偿似乎工作正常。 它只是让我头痛的预览。 testing运行CM11和Nexus 10运行股票机器人i9003。

Solutions Collecting From Web of "Android相机预览很暗"

在我的实验中, scene-mode设置可以改变预览(与ISO或曝光补偿不同,这两种模式都适用于拍摄的图片)。 不要使用auto 。 试试scene-mode-values=night或者scene-mode=dusk-dawn

场景的问题是支持的值在各个设备之间不是标准化的。 但是通常会有某种night

某些相机错误地报告了支持的预览FPS范围似乎有一个错误。 您可以通过调用时返回最小值和最大值的值来识别违规设备

getPreviewFpsRange (int[] range)

在我的情况下,我看到这个问题报告(15000, 15000)(30000, 30000) ,但没有设备的价值是不同的,如(7000, 30000)

我能find的最佳解决scheme是确定支持的最小和最大不同值的FPS范围,并设置:

 Camera.Parameters params = camera.getParameters(); final int[] previewFpsRange = new int[2]; params.getPreviewFpsRange(previewFpsRange); if (previewFpsRange[0] == previewFpsRange[1]) { final List<int[]> supportedFpsRanges = params.getSupportedPreviewFpsRange(); for (int[] range : supportedFpsRanges) { if (range[0] != range[1]) { params.setPreviewFpsRange(range[0], range[1]); break; } } } camera.setParameters(params); 

这是有效的,因为报告的范围似乎只有1项与实际范围。 例如:

BLU Vivo XL:

 preview-fps-range=30000,30000 preview-fps-range-values=(15000,15000),(20000,20000),(24000,24000),(5000,30000),(30000,30000) 

像素:

 preview-fps-range=7000,30000 preview-fps-range-values=(15000,15000),(24000,24000),(7000,30000),(30000,30000) 

比较可靠的方法是设置最小值和最大值。