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

カメラの使用方法(2)

6月 19, 2010   //   by kseto   //   デバイス  //  1 Comment

今回はカメラの使用方法の後編になります。
前回はカメラをオープンして、SurfaceViewにカメラのプレビュー画面を表示するところまで紹介しました。
今回はプレビュー画面の内容を撮影し、SDカードに保存するという処理まで説明したいと思います。

詳細は続きからどうぞ。

撮影処理を司るのはCameraクラスのtakePictureです。
public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)

引数はそれぞれ以下のようになっています。

  • Camera.ShutterCallback shutter:シャッターが押されたときに呼ばれるコールバックを指定します。
  • Camera.PictureCallback raw:Rawイメージ生成後に呼ばれるコールバックを指定します。
  • Camera.PictureCallback jpeg:JPEGイメージ生成後に呼ばれるコールバックを指定します。

ボタンを押したときなどのタイミングでtakePictureメソッドを呼び出してやれば上記の各コールバックが呼ばれることになります。
たとえば、画面を押したときに撮影を行い、SDカードにデータを保存する、というコードを書くと以下のようになります。

// シャッターが押されたときに呼ばれるコールバック
private Camera.ShutterCallback mShutterListener =
	new Camera.ShutterCallback() {
		public void onShutter() {
			// TODO Auto-generated method stub
		}
	};

// JPEGイメージ生成後に呼ばれるコールバック
private Camera.PictureCallback mPictureListener =
	new Camera.PictureCallback() {
		public void onPictureTaken(byte[] data, Camera camera) {
			// SDカードにJPEGデータを保存する
			if (data != null) {
				FileOutputStream myFOS = null;
				try {
					myFOS = new FileOutputStream("/sdcard/camera_test.jpg");
					myFOS.write(data);
					myFOS.close();
				} catch (Exception e) {
					e.printStackTrace();
				}

				camera.startPreview();
			}
		}
	};

@Override
public boolean onTouchEvent(MotionEvent event) {
	if (event.getAction() == MotionEvent.ACTION_DOWN) {
		if (myCamera != null) {
			myCamera.takePicture(mShutterListener, null, mPictureListener);
		}
	}
	return true;
}

なお、takePictureメソッドを呼び出すとSurfaceViewへのプレビュー表示がストップしてしまいますので注意が必要です。
上記コードのJPEGイメージ生成後に呼ばれるコールバック処理内の最後でプレビューを再開しているのはそのためです。

関連する記事:

Sponsored Link

1 Comment

技術書新刊 発売中

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

技術書新刊 発売中

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


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


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


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