Androidのカメラアプリをオートフォーカス対応にする

test116af_01.png
前回はシンプルなAndroidカメラアプリを作成した。今回は前回のカメラアプリをオートフォーカス対応にする。

まずはAndroidManifest.xmlにオートフォーカスの利用宣言を追加する。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.Test116"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Test116Act"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

</manifest>

test116af_02.png
「オートフォーカス」というと実装が難しいように感じるが、ものすごく簡単にできる。

今まで撮影用にCamera.takePicture()を呼んでいた所で、代わりにCamera.autoFocus()を使ってオートフォーカスコールバックを指定する。するとオートフォーカスが終了したときにコールバックが実行されるので、そこで改めてCamera.takePicture()を呼んで撮影するだけだ。

	private Camera.AutoFocusCallback	_pfnAutoFocusCallback = new AutoFocusCallback();

	private final class AutoFocusCallback implements Camera.AutoFocusCallback
	{
		public void onAutoFocus(boolean success, Camera camera)
		{
			Log.d(TAG, "CameraView::onAutoFocus()");

			camera.autoFocus(null);
			camera.takePicture(_pfnShutterCallback, _pfnRawPictureCallback,new JpgPictureCallback());
		};
	}


	public void TakePicture()
	{
		Log.d(TAG, "CameraView::takePicture()");
		
		if(_nReady != 0)
		{
			_nReady = 0;
			if(true)
			{
				//オートフォーカス撮影
				_Camera.autoFocus(_pfnAutoFocusCallback);
			}
			else
			{
				//即撮影
				_Camera.takePicture(_pfnShutterCallback, _pfnRawPictureCallback,new JpgPictureCallback());
			}
		}
	}

test116af_03.png
実際に撮影してギャラリーで確認。きちんとピントが合っている。

test116af_04.jpg
これが実際に撮影した画像を縮小したもの。前回のピンぼけ写真とは比べ物にならないぐらいよくなった。




プロジェクトファイルをダウンロード


カテゴリー「android」 のエントリー