カメラの使用方法(1)


今回はカメラの使い方について説明します。
とりあえず今回はSurfaceViewにカメラから得られる画像のプレビュー画面を表示するところまで紹介して、
撮影処理は次回ご紹介します。

作業手順として以下のようになります。

  • マニフェストファイルにカメラのパーミッションを追加する
  • レイアウトファイルにSurfaceViewを追加する
  • プレビュー画面の実装

詳しくは続きからどうぞ。

マニフェストファイルにカメラのパーミッションを追加する

アプリケーションからカメラを使用するために、
マニフェストファイル(AndroidManifest.xml)に以下のコードを追記します。

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

レイアウトファイルにSurfaceViewを追加する

プレビュー画面となるSurefaceViewをレイアウトファイル(main.xml)に記述します。

1
2
3
4
5
<SurfaceView
    android:id="@+id/surface_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

プレビュー画面の実装

続いてプレビュー画面の実装です。
プレビュー画面の実装にはSurfaceHolder.Callbackを使って、
SurfaceViewの生成時、破棄時、変更時に適切な処理を実装します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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