Androidでカメラから撮影画像を取得する
Androidでカメラ制御する際、いくつかハマったので、
CameraAPIを使って撮影するまでをまとめておきます。
カメラで見ているものを表示する
CameraPreview.java | Android Developers
まずはカメラで見ているものを画面に表示します。
AndroidSDKフォルダ内にサンプルソース(CameraPreview.java)があるので、ひとまずこれを使用します。
Cameraデバイスの使用
Cameraデバイスの使用には、使用許可が必要なため、
AndroidManifest.xmlにパーミッションを追加し、Cameraデバイスの使用を許可しておきます。
実行するとカメラからの画像が画面に表示されているのが確認出来ます。
ここでは横向きカメラを作る方向で進めていきます。
横向きに対応させる
AndroidManifest.xmlのActivityに横向きアプリであることを設定します。設定の仕方は以下。
比率を合わせる
初期状態ではアプリのタイトルバーやAndroidのステータスバーにより、表示領域が潰れています。以下の設定によりアプリをフルスクリーン表示で画面いっぱいに表示させるようにします。
フルスクリーン設定には2つ方法があるので、お好きな方法で設定してください。
1)Windowクラスから設定する
2)AndroidManifest.xmlで設定する
また、サンプルでは設定されていますが、タイトルバーが表示されている場合は非表示にしてみます。
以上でカメラからの画像を正しく表示できるようになったかと思います。
撮影データを取得する
Camera.takePicture()
撮影にはCamera.takePicture()を使用します。
Camera.takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)の引数にコールバックを設定することで撮影されたデータ等を受け取ることができます。
Camera.ShutterCallback shutter
撮影直後に呼ばれるコールバックを設定します。
シャッター音を鳴らす場合等に使用します。
Camera.PictureCallback raw
撮影されたデータを受け取るコールバックを設定します。
コールバックにはRAW画像データが渡されます。
Camera.PictureCallback jpeg
撮影されたデータを受け取るコールバックを設定します。
コールバックにはJPEG画像データが渡されます。
PictureCallback
以下にPictureCallbackの一例を示します。
Camera.takePicture()が呼ばれると、撮影データはPictureCallback.onPictureTaken()にbyte列で渡されます。
その後は保存するなり表示するなり各アプリでの処理を記述してください。
例ではBitmapFactoryを利用し、byte列をBitmapデータに変換しています。
以上、CameraAPIで撮影するまでのまとめでした。


