Androidカメラプレビューの利用

Androidカメラプレビューの利用

Androidのカメラプレビューを使うには
SurfaceViewを設置してプレビュー領域を作成

そして、Cameraクラスの
startPreview()を使ってプレビューを開始する

まずは、SurfaceViewの設置

これは、レイアウトファイルとなるXMLファイルへ追加する

<SurfaceView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

次に、SurfaceHolderを取得して
コールバック処理を追加する

これは、設置した SurfaceView から
SurfaceHolder を取得し
SurfaceViewの生成時
変更時、破棄時のときの処理を追加する

コールバック処理は、そのときに行う処理のこと

まずは、SurfaceHolderの取得

mSurfaceHolder = mSurfaceView.getHolder();

次に、処理の追加
処理の追加は、addCallback()で追加できる
とりあえず、プロトタイプ

mSurfaceHolder.addCallback(

@Override
public void surfaceDestroyed(SurfaceHolder holder){
//破棄時の処理
}

@Override
public void surfaceCreated(SurfaceHolder holder){
//生成時の処理
}

@Override
public void surfaceChanged(SurfaceHolder holder int format, int width, int height){
//変更時の処理
}

)

これで、だいたいの骨格ができたので
次に、生成時の処理になる
surfaceCreated()の中身を書いていく

ここでは、カメラの初期化
そして、デバイスで利用できる
カメラプレビュー一覧も取得する

なお、取得失敗も考慮し、try catchで処理する

@Override
public void onCreated(SurfaceHolder holder){

//カメラの初期化処理
mCamera = Camera.open();
if(mCamera !=null){

try{
mCamera.setPreviewDisplay(mSurfaceHolder);

}catch(IOException e){
e.printStackTrace();
}

//利用可能なプレビューサイズの取得
mSupportedPreviewSize = mCamera.getParameters().getSupportedPreviewSizes();
}
}

次に、SurfaceChanged()の中身を書いていく
ここでは、ディスプレイサイズから
カメラプレビューに最適なサイズを選択し
カメラプレビューを開始する

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){

if(mCamera !=null){
Parameters param = mCamera.getParameters();

if(mSupportedPreviewSizes !=null){

//ディスプレイサイズに最適なサイズを設定
mPreviewSize = CameraUtil.getOptimalPreviewSize(mSupportedPreviewSizes, width, height);

//カメラのプレビューサイズをセット
param.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
mCamera.setParameters(param);
}

//プレビュー開始
mCamera.startPreview();
}

}

そして、
surfaceDestroyed()へ
SurfaceView破棄時のコールバック処理を書く
ここでは、カメラプレビューを使わなくなったときの処理を書く

@Override
public void surfaceDestroyed(SurfaceHolder holder){

//カメラの終了処理
mCamera.stopPreview();
mCamera.release();
mCamera =null;
}

あとは、カメラを扱うため
AndroidManifest.xmlへ権限を追記する

<uses-permission android:name="android.permission.CAMERA"/>

あと、surfaceHolder へ
addCallback()
で、コールバックを追加すると
以下のメソッドかわ追加される

surfaceDestroyed(SurfaceHolder holder)
これは、SurfaceViewが破棄されたときに呼ばれる

surfaceCreated(SurfaceHolder holder)
これは、SurfaceViewが生成されるときに呼ばれる

surfaceChanged(SurfaceHolder holderint format, int width, int height)
これは、SurfaceViewが変更されたときに呼ばれる

カメラプレビューでこれらのメソッドを使う場合

onSurfaceCreated()で
カメラを初期化

onSurfaceChanged()で
プレビューの設定と開始処理

onSurfaceDestroyed()で
カメラの終了処理をする

次に、カメラパラメーターの設定

カメラは、プレビューを開始する前に
カメラに様々なパラメーターを追加できる

プレビューサイズもパラメーターに該当するため
パラメーター扱いで変更できる

カメラパラメーターは
Camera.getParameters()で取得し
setParameters()でセットする

あと、Androidはデバイスごとに画面のプレビューサイズが代わるため
CameraUtilクラスの
getOptimalPreviewSize()を使う

コメントを残す

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