サイト移転のお知らせ:http://techbooster.org/に移転しました

カメラの使用方法(1)

6月 12, 2010   //   by kseto   //   アプリケーション, デバイス  //  3 Comments

今回はカメラの使い方について説明します。
とりあえず今回は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()でコールバック関数を登録します。

以上で、とりあえずカメラのプレビューができるようになります。
次回はシャッターを押したらプレビューの内容を撮影するところまで行きたいと思います。

関連する記事:

Sponsored Link

3 Comments

  • [...] 今回はカメラの使用方法の後編になります。 前回はカメラをオープンして、SurfaceViewにカメラのプレビュー画面を表示するところまで紹介しました。 今回はプレビュー画面の内容を撮影 [...]

  • [...] TechBoosterでは一度、カメラの使用方法(1)、(2)で触れています。 その際は、Cameraというハードウェアのマルチメディア処理を主眼に紹介しました。 今回は改めて描画処理をおこなうSurfaceVi [...]

  • [...] カメラの使用方法(1) [...]

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です