最終更新:
moonlight_aska 2015年04月10日(金) 00:31:14履歴
カメラのフォーカスを設定するには, カメラパラメータ(Camera.Parameters)を使用する.
「プレビュー画像を表示する」を参照して, カメラでプレビュー画像を表示できるようにする.


↓ マクロモードの場合

- src/MainActivity.java
- Camera#getParametersメソッドで, Camera.Parametersのインスタンスを取得する.
- Camera.Parameters#getSupportedFocusModesメソッドで, サポートしているフォーカスモードを取得する.
- Camera.Parameters#setFocusModeメソッドで, FOCUS_MODE_MACROを設定する.
- Camera#setParametersメソッドで, Camera.Parametersを設定する.
定数名 | 説明 | 追加API Level |
FOCUS_MODE_AUTO | オートフォーカスモード | 5 |
FOCUS_MODE_CONTINUOUS_PICTURE | 写真撮影時の連続オートフォーカスモード | 14 |
FOCUS_MODE_CONTINUOUS_VIDEO | ビデオ記録時の連続オートフォーカスモード | 9 |
FOCUS_MODE_EDOF | 被写界深度拡大 | 8 |
FOCUS_MODE_FIXED | フォーカス固定 | 5 |
FOCUS_MODE_INFINITY | 無限遠に設定する | 5 |
FOCUS_MODE_MACRO | マクロモード | 5 |
package com.moonlight_aska.android.camera02;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private Camera mCamera = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView preview = (SurfaceView)findViewById(R.id.preview_id);
SurfaceHolder holder = preview.getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
// カメラオープン
mCamera = Camera.open();
// パラメータ取得
Camera.Parameters params = mCamera.getParameters();
// サポートモード取得
List< String > focusList = params.getSupportedFocusModes();
for (int i=0; i < focusList.size();i++) {
Log.v("CameraFocus", "Mode = " + focusList.get(i));
}
// フォーカスモード:マクロモードに設定
params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
// パラメータ設定
mCamera.setParameters(params);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
mCamera.stopPreview();
// プレビュー画面のサイズ設定
Camera.Parameters params = mCamera.getParameters();
List<Size> previewSizes = params.getSupportedPreviewSizes();
Size size = previewSizes.get(0);
params.setPreviewSize(size.width, size.height);
mCamera.setParameters(params);
// プレビュー開始
mCamera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
- AndroidManifest.xml
- オートフォースを設定する場合, "android.hardware.camera.autofocus"で, オートフォーカス機能を備えたハードに限定する.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moonlight_aska.android.camera02"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camere"/>
<uses-feature android:name="android.hardware.camere.autofocus"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
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>
</manifest>
- 動作例


↓ マクロモードの場合

コメントをかく