カメラの使用方法(2)
|今回はカメラの使用方法の後編になります。
前回はカメラをオープンして、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カードにデータを保存する、というコードを書くと以下のようになります。
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 | // シャッターが押されたときに呼ばれるコールバック 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イメージ生成後に呼ばれるコールバック処理内の最後でプレビューを再開しているのはそのためです。
4 Comments