我正在为安卓开发一个opencv应用程序,并试图锁定相机的自动曝光。我一直在按照OpenCV3Android中的教程4示例进行操作,以便访问各种相机参数。我创建了一个用于访问相机属性的自定义相机类。
完全错误:
NullPointerException: Attempt to invoke virtual method 'android.hardware.Camera$Parameters
android.hardware.Camera.getParameters() on a null object reference
at {PackageName}.MainView.lockAutoExposure()
这是我到目前为止的 MainView 类(自定义相机类):
public class MainView extends JavaCameraView {
private static final String TAG = "Urop::MainView";
public MainView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@SuppressWarnings("deprecation")
public void lockAutoExposure() {
Camera.Parameters params = mCamera.getParameters();
params.setAutoExposureLock(true);
mCamera.setParameters(params);
}
}
这是我实例化类并在主活动中设置它的地方:
private MainView mOpenCvCameraView;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch(status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "Loaded Successfully");
mOpenCvCameraView.enableView();
mOpenCvCameraView.setMaxFrameSize(640, 480);
mOpenCvCameraView.lockAutoExposure();
System.loadLibrary("opencvnative");
break;
}
...
我在清单中的权限。不确定我是否需要其他任何东西:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.front"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.front.autofocus"
android:required="false" />
如果有人能帮忙,我将不胜感激!
通过将 lockAutoExposure 移动到 onCameraViewStarted() 方法来解决它。
mCamera
是一个空对象。它失败了,因为您试图在不存在的东西上调用getParameters()
(除非您没有向我们展示完整的代码?