Android相机预览很暗

Pun*_*eet 11 camera android iso preview

我正在尝试创建一个自定义相机应用程序.我从这里跟随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);

}
Run Code Online (Sandbox Code Playgroud)

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);
    }
Run Code Online (Sandbox Code Playgroud)

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

在这里看到差异: Stock Camera App 股票相机预览 我的相机应用程序 我的相机应用

尝试根据此处发布的摄像机的upack参数设置ISO等.它仍然无法正常工作.

参数(16369):effect-values = none,mono,negative,sepia,aqua,sharpen,purple,green-tint,blue-tint,pink,yellow,red-tint,mono,antique; exposure-compensation-step = 0.5 ;焦距= 3.43;对焦区=(0,0,0,0,0);对焦距离= 0.10,1.20,无穷远;将对焦模式值=汽车,宏,facedetect; GPS海拔= 0 ; GPS纬度= 0; GPS的经度= 0; GPS处理法=全球定位系统; GPS时间戳= 0;水平视角= 51.2; ISO =汽车;异值=汽车,ISO50,ISO100,ISO200 ,ISO400,ISO800,ISO1600; JPEG-质量= 1; JPEG缩略图高度= 480; JPEG缩略图大小的值= 640x480,0x0; JPEG缩略图宽度= 640;最大曝光补偿= 4;最大-num-聚焦区域= 1;最大变焦= 12;最小曝光补偿= -4;画面格式= JPEG;画面格式值= JPEG;图像尺寸值= 2560x1920,2560x1536,2048x1536, 2048x1232,1600x1200,1600x960,800x480,640x480;预览格式= yuv420sp;预览格式值= yuv420sp;预览FPS-范围= 15000,30000;预览FPS-范围值=(15000,30000);预览 - 帧速率= 30;预览帧率值= 30;预览大小640×480 =;预 视图大小值= 1280x720,800x480,720x480,640x480,352x288;旋转= 0;场景模式=自动,场景模式值=自动,肖像,风景,夜景,海滩,雪景,夕阳,烟火,运动,方,烛光,ASD,背光源,黄昏黎明,文本,水落颜色;垂直视角= 39.4;视频帧格式= yuv422i-YUYV;最大光圈值=汽车,白炽灯,荧光灯,日光,cloudy-日光;变焦= 0;变焦比= 100,125,150,175,200,225,250,275,300,325,350,375,400;放大支持= TRUE;将对焦模式自动=;图像尺寸= 2560x1920;曝光补偿= 4;

编辑:根据以下评论进行进一步测试后,看起来它的预览会变得比它应该更暗.实际捕获的图像光线充足,曝光补偿似乎工作正常.它只是让我头疼的预览.测试运行CM11和Nexus 10运行股票android的i9003.

Pra*_*ena 13

某些摄像机似乎有错误报告支持的预览FPS范围.您可以通过在呼叫时返回相同的min和max值来识别违规设备

getPreviewFpsRange (int[] range)

以我为例,我看到与报道设备这个问题(15000, 15000)(30000, 30000)有关,而与其中的值是不同的,类似的设备(7000, 30000).

我能找到的最佳解决方案是确定支持的FPS范围,该范围具有不同的min和max值,并设置:

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);
Run Code Online (Sandbox Code Playgroud)

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

BLU Vivo XL:

preview-fps-range=30000,30000
preview-fps-range-values=(15000,15000),(20000,20000),(24000,24000),(5000,30000),(30000,30000)
Run Code Online (Sandbox Code Playgroud)

像素:

preview-fps-range=7000,30000
preview-fps-range-values=(15000,15000),(24000,24000),(7000,30000),(30000,30000)
Run Code Online (Sandbox Code Playgroud)

更强大的方法是通过比较所有可用的来设置最小值和最大值.


Ale*_*ohn 1

根据我的实验,scene-mode设置可以更改预览(与 ISO 或曝光补偿不同,它们都适用于拍摄的图片)。不要使用auto. 尝试scene-mode-values=nightscene-mode=dusk-dawn

场景的问题在于支持的值在不同设备上没有标准化。night但通常存在某种形式。