カメラの使用方法(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