Androidカメラの露出やオートフォーカスの制御

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){
//AutoFocusのリセット
mCamera.cancelAutoFocus();
 
//AutoFocus開始
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()
現在の露出値

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です