Androidカメラの露出やオートフォーカスの制御
カメラでオートフォーカスを使うには
autoFocus()
を使う
露出を変更したいのなら
setExposureCompensation()
を使う
これらをやる前に、まずは
カメラプレビューを実装しておくこと
次に、端末がオートフォーカス対応か判定する
1 2 3 4 5 | public static boolean isSupportFocus(Context context){
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS);
}
|
これで、結果がtrueなら使えるし
falseなら使えない
判定ができたらオートフォーカスを使うため
Camera.autoFocus()を使う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | private void setCameraAutoFocus(){
if (mCamera != null && mIsSupportFocus){
mCamera.autoFocus( new AutoFocusCallback(){
@Override
public void onAutoFocus( boolean success, Camera camera){
mCamera.cancelAutoFocus();
mCamera.autoFocus( null );
}
});
}
}
|
そして、露出情報の取得
露出を変更する前に
デバイスに搭載されているカメラの
露出情報を取得する
これで取得した値を元に
現在の露出値や
露出値の上限、下限を設定
1 2 3 4 5 6 7 8 | mMinExposure = mCamera.getParameters().getMinExposureCompensation();
mMaxExposure = mCamera.getParameters().getMaxExposureCompensation();
mExposureValue = mCamera.getParameters().getExposureCompensation();
|
そして、事前に取得した露出情報を露出の値を変更する
1 2 3 4 5 6 7 8 9 10 11 12 13 | mExposureValue++;
if (mExposureValue > mMaxExposure){
mExposureValues = mMinExposure;
}
Parameters param = mCamera.getParameters();
param.getExposureCompensation(mExposureValue);
mCamera.setParameters(param);
mBtnExposure.setText(getString(R.string.exposure )+ mExposureValue);
|
次に、システム要件にオートフォーカスが必要なことを明記する
これで、非対応端末はインストールできる
これは、AndroidManifest.xmlへ追記する
1 | < uses-feature android:name = "android.hardware.camera.autofocus" />
|
オートフォーカス連続使用の注意点として
デバイスによっては強制終了の可能性があるため
事前に
Camera.cancelAutoFocus()を呼び出し
オートフォーカスをリセットすれば安定する
あと、露出情報については
CameraParametersのメソッドをつかうことで
各露出情報を取得できる
getMaxExposureCompensation()
露出の上限
getMinExposureCompensation()
露出の下限
getExposureCompensation()
現在の露出値