我正在尝试创建一个自定义相机应用程序。我遵循了这里的Android开发者示例,并进行了一些小调整。然而,我的相机预览效果非常暗淡。另一方面,原生相机给出了更明亮的预览。
我尝试了几个设置来使它工作得更好,但似乎没有任何影响。相关代码发布在此处。
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等。它仍然不起作用。
在下方评论的基础上进行进一步测试后,编辑:似乎只是预览比它应该更暗淡。实际捕获的图像光线很好,曝光补偿似乎正常工作。只是预览让我头痛。在运行CM11的i9003和运行原生Android的Nexus 10上进行了测试。