前回はシンプルなAndroidカメラアプリを作成した。今回は前回のカメラアプリをオートフォーカス対応にする。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://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>
「オートフォーカス」というと実装が難しいように感じるが、ものすごく簡単にできる。
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()); } } }
実際に撮影してギャラリーで確認。きちんとピントが合っている。
これが実際に撮影した画像を縮小したもの。前回のピンぼけ写真とは比べ物にならないぐらいよくなった。
プロジェクトファイルをダウンロード