Android相机预览是黑暗的 [英] Android camera preview is dark

查看:525
本文介绍了Android相机预览是黑暗的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建自定义相机应用程序。我按照Android开发人员示例从这里进行了小小的调整。但是,我的相机预览结果是相当黑暗。另一方面,股票相机给出了更明亮的预览。



我已经尝试了几个设置,使其工作更好,但似乎没有一个有任何影响。

CameraActivity(Main)



  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); //尝试使用400,800,600(从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



查看区别:
股票相机应用

我的相机应用



根据发布在相机上的upack参数尝试设置ISO等。它仍然不工作。


参数(16369):
effect-values = none,mono,negative,水平,锐化,紫色,绿色,蓝色,粉红色,黄色,红色,单色,古董;曝光补偿步长= 0.5;焦距= 3.43;焦点面积= ,0,0); focus-distance = 0.10,1.20,Infinity; focus-mode-values = auto,macro,facesetect; gps-altitude = 0; gps-latitude = 0; gps-longitude =方法= GPS; gps-timestamp = 0;水平视角= 51.2; iso = auto; iso-值= auto,ISO50,ISO100,ISO200,ISO400,ISO800,ISO1600; jpeg- height-480; jpeg-thumbnail-size-values = 640x480,0x0; jpeg-thumbnail-width = 640; max-exposure-compensation = 4; max-num-focus-areas = 1; max-zoom = 12; exposure-compensation = -4; picture-format = jpeg; picture-format-values = jpeg; picture-size-values = 2560x1920,2560x1536,2048x1536,2048x1232,1600x1200,1600x960,800x480,640x480; preview-format = yuv420sp; preview -format-values = yuv420sp; preview-fps-range = 15000,30000; preview-fps-range-values =(15000,30000); preview-frame-rate = 30; preview-frame-rate-values = 30; preview -size = 640x480; preview-size-values = 1280x720,800x480,720x480,640x480,352x288; rotation = 0; scene-mode = auto; scene-mode-values = auto,portrait,landscape,night,beach,snow,sunset ,烟花,运动,派对,烛光,asd,背光,黄昏黎明,文本,秋天色;垂直视角= 39.4;视频帧格式= yuv422i-yuyv;白平衡值=汽车,白炽,荧光,日光,多云日光; zoom = 0;缩放比= 100,125,150,175,200,225,250,275,300,325,350,375,400; zoom-supported = true; focus-mode = auto; picture-size = 2560x1920; exposure-compensation = 4;


编辑:进一步测试基于下面的评论,它似乎只是预览,变得比它应该是更黑暗。实际捕获的图像是充分照明和曝光补偿似乎工作正常。它只是预览,这让我头痛。测试在i9003上运行CM11和Nexus 10运行股票android。

解决方案

从我的实验,场景模式设置可以更改预览(不像ISO或曝光补偿,它们都适用于捕获的图片)。不要使用 auto 。尝试 scene-mode-values = night scene-mode = dusk-dawn



场景的问题是支持的值不是跨设备标准化的。但是通常会出现某种


I am trying to create a custom camera app. I followed the Android Developer example from here with minor tweaks. However, my camera preview turns out to be rather dark. On the other hand, the stock camera gives a much brighter preview.

I have tried several settings to make it work better but it seems none of them are having any impact. Relevant code is posted here.

CameraActivity (Main)

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 class (initialize the camera and set the default parameters)

    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);
    }

The Camera sends the frames to SurfaceHolder.Surface from the example linked from developer pages above.

See the difference here: Stock Camera App My Camera App

Tried setting the ISO, etc based on upack parameters from the camera as posted here. It still didn't work.

Parameters(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;focal-length=3.43;focus-areas=(0,0,0,0,0);focus-distances=0.10,1.20,Infinity;focus-mode-values=auto,macro,facedetect;gps-altitude=0;gps-latitude=0;gps-longitude=0;gps-processing-method=GPS;gps-timestamp=0;horizontal-view-angle=51.2;iso=auto;iso-values=auto,ISO50,ISO100,ISO200,ISO400,ISO800,ISO1600;jpeg-quality=1;jpeg-thumbnail-height=480;jpeg-thumbnail-size-values=640x480,0x0;jpeg-thumbnail-width=640;max-exposure-compensation=4;max-num-focus-areas=1;max-zoom=12;min-exposure-compensation=-4;picture-format=jpeg;picture-format-values=jpeg;picture-size-values=2560x1920,2560x1536,2048x1536,2048x1232,1600x1200,1600x960,800x480,640x480;preview-format=yuv420sp;preview-format-values=yuv420sp;preview-fps-range=15000,30000;preview-fps-range-values=(15000,30000);preview-frame-rate=30;preview-frame-rate-values=30;preview-size=640x480;preview-size-values=1280x720,800x480,720x480,640x480,352x288;rotation=0;scene-mode=auto;scene-mode-values=auto,portrait,landscape,night,beach,snow,sunset,fireworks,sports,party,candlelight,asd,backlight,dusk-dawn,text,fall-color;vertical-view-angle=39.4;video-frame-format=yuv422i-yuyv;whitebalance-values=auto,incandescent,fluorescent,daylight,cloudy-daylight;zoom=0;zoom-ratios=100,125,150,175,200,225,250,275,300,325,350,375,400;zoom-supported=true;focus-mode=auto;picture-size=2560x1920;exposure-compensation=4;

Edit: Upon further testing based on comments below, it appears that its just the preview that is turning out darker than it should be. The actual captured image is well lit and exposure compensatiion seems to be working fine. Its just the preview that is giving me a headache. Tested on i9003 running CM11 and Nexus 10 running stock android.

解决方案

From my experiments, scene-mode setting can change the preview (unlike ISO or exposure-compensation, which both work for captured pictures). Don't use auto. Try scene-mode-values=night or scene-mode=dusk-dawn.

The problem with scenes is that the supported values are not standardized across devices. But some kind of night is usually present.

这篇关于Android相机预览是黑暗的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆