カメラの使用方法(1)
今回はカメラの使い方について説明します。
とりあえず今回はSurfaceViewにカメラから得られる画像のプレビュー画面を表示するところまで紹介して、
撮影処理は次回ご紹介します。
作業手順として以下のようになります。
- マニフェストファイルにカメラのパーミッションを追加する
- レイアウトファイルにSurfaceViewを追加する
- プレビュー画面の実装
詳しくは続きからどうぞ。
マニフェストファイルにカメラのパーミッションを追加する
アプリケーションからカメラを使用するために、
マニフェストファイル(AndroidManifest.xml)に以下のコードを追記します。
<uses-permission android:name="android.permission.CAMERA" />
レイアウトファイルにSurfaceViewを追加する
プレビュー画面となるSurefaceViewをレイアウトファイル(main.xml)に記述します。
<SurfaceView android:id="@+id/surface_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
プレビュー画面の実装
続いてプレビュー画面の実装です。
プレビュー画面の実装にはSurfaceHolder.Callbackを使って、
SurfaceViewの生成時、破棄時、変更時に適切な処理を実装します。
package com.example.camera;
import android.app.Activity;
import android.os.Bundle;
import android.hardware.Camera;
import android.view.SurfaceView;
import android.view.SurfaceHolder;
public class CameraTest extends Activity {
private Camera myCamera;
private SurfaceHolder.Callback mSurfaceListener =
new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
myCamera = Camera.open();
try {
myCamera.setPreviewDisplay(holder);
} catch (Exception e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
myCamera.release();
myCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Camera.Parameters parameters = myCamera.getParameters();
parameters.setPreviewSize(width, height);
myCamera.setParameters(parameters);
myCamera.startPreview();
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SurfaceView mySurfaceView = (SurfaceView)findViewById(R.id.surface_view);
SurfaceHolder holder = mySurfaceView.getHolder();
holder.addCallback(mSurfaceListener);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}
SurfaceViewのコールバック関数で実装している内容を順に見ていきますと、
- surfaceCreated:SurfaceViewが生成されたらカメラをオープンする
- surfaceDestroyed:SurfaceViewが破棄されたらカメラを解放する
- surfaceChanged:SurfaceViewの大きさやフォーマットが変わったらプレビューの大きさを設定する
のようになります。
コールバック関数を実装できたら、あとはholder.addCallback()でコールバック関数を登録します。
以上で、とりあえずカメラのプレビューができるようになります。
次回はシャッターを押したらプレビューの内容を撮影するところまで行きたいと思います。
4 Comments