Androidカメラの露出やオートフォーカスの制御
カメラでオートフォーカスを使うには
autoFocus()
を使う
露出を変更したいのなら
setExposureCompensation()
を使う
これらをやる前に、まずは
カメラプレビューを実装しておくこと
次に、端末がオートフォーカス対応か判定する
public static boolean isSupportFocus(Context context){
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS);
}
これで、結果がtrueなら使えるし
falseなら使えない
判定ができたらオートフォーカスを使うため
Camera.autoFocus()を使う
private void setCameraAutoFocus(){
if(mCamera !=null && mIsSupportFocus){
mCamera.autoFocus(new AutoFocusCallback(){
@Override
public void onAutoFocus(boolean success, Camera camera){
//AutoFocusのリセット
mCamera.cancelAutoFocus();
//AutoFocus開始
mCamera.autoFocus(null);
}
});
}
}
そして、露出情報の取得
露出を変更する前に
デバイスに搭載されているカメラの
露出情報を取得する
これで取得した値を元に
現在の露出値や
露出値の上限、下限を設定
//下限の設定
mMinExposure = mCamera.getParameters().getMinExposureCompensation();
//上限の設定
mMaxExposure = mCamera.getParameters().getMaxExposureCompensation();
//現在の露出値の算出
mExposureValue = mCamera.getParameters().getExposureCompensation();
そして、事前に取得した露出情報を露出の値を変更する
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へ追記する
<uses-feature android:name="android.hardware.camera.autofocus"/>
オートフォーカス連続使用の注意点として
デバイスによっては強制終了の可能性があるため
事前に
Camera.cancelAutoFocus()を呼び出し
オートフォーカスをリセットすれば安定する
あと、露出情報については
CameraParametersのメソッドをつかうことで
各露出情報を取得できる
getMaxExposureCompensation()
露出の上限
getMinExposureCompensation()
露出の下限
getExposureCompensation()
現在の露出値