フラッシュやフォーカス、色合いも変えれるカメラAPI
Camera.Parametersというクラスを使用してカメラの設定ができます。
設定項目 | 説明 |
---|---|
Antibanding | 階調の落差に関する設定 |
ColorEffect | 色合いを変更 |
FlashMode | フラッシュの設定 |
FocusMode | フォーカスの動作に関する設定 |
SceneMode | 撮影シーンの設定 |
WhiteBalance | ホワイトバランスの設定 |
表 カメラの設定(抜粋) |
上記以外にも写真に位置情報を入れたり、写真のサイズを変更したり、JPEGのクオリティを設定したりできます。
気を付けなければならないのは、「Camera.Parametersで定義されている設定は、必ずしもすべての端末で使用できるわけではない」という点です。
例えば「花火を撮影するシーン」というものがCamera.Parameters.SCENE_MODE_FIREWORKSとして定義されていますが、これが使用できるかできないかは、以下のように判定する必要があります。
Camera.Parameters params = camera.getParameters(); List<String> supported = params.getSupportedSceneModes(); if (supported != null) { for (String sm : supported) { if (sm.equals(Camera.Parameters.SCENE_MODE_FIREWORKS)) { // サポートしている } } }
以下は、ColorEffectを設定した比較です。
端末でサポートされているならば、設定するだけで効果が現れるので、とても簡単です。設定画面はプレビューの右上辺りをタッチしてください。
コラム 「カメラ制御の勘所」
カメラを制御するためにCamera.openメソッドでインスタンスを取得しますが、内部ではカメラのサービスに接続を行っています。ほかのアプリがカメラを使っている場合、接続に失敗することがあるのはもちろん、自分のアプリも使い終わったら適切に解放する必要があります。
Camera.open()メソッドはRuntimeExceptionが発生する可能性があり、カメラを使い終える場合はCamera#release()メソッドは忘れてはいけません。
カメラの設定を行う際にも、カメラのインスタンスが必要ですが、設定画面は今回のようにカメラのプレビューを表示させているActivityとは異なる場合があると思います。
この場合、設定画面を呼び出した際に、プレビューのSurfaceViewはsurfaceDestroyedが呼び出されライフサイクルを終了しますが、カメラはCamera#release()を呼び出さずに生かしたままにしておきます。設定画面では、設定した内容を呼び出し元のActivityにIntentとして返し、呼び出し元は戻ってきた際に再びSurfaceViewを生成してカメラにプレビューやコールバックを設定し直し、設定されたパラメータを適用する、という方法を採ると、比較的シンプルになります。
カメラのライフサイクルは、SurfaceViewのライフサイクルと密接な関係を持ちますが、同時にActivityのライフサイクルとも密接な関係を持ちます。今回のサンプルアプリでは、簡単であるため実装していませんが、実際にはActivity#onPause()などで、プレビューを停止し、カメラをリリースする必要があります。
オーバーレイでAR(拡張現実)アプリもできる?
カメラのプレビューにオーバーレイを重ねて表示させることで、実際に見えている映像に情報を付加することが可能です。
サンプルのオーバーレイ機能は、タッチされた場所にロボットを描画するだけの機能ですが、サンプルとしては分かりやすいと思いますので、ソースコードを参照してみてください。
オーバーレイは、いま流行の拡張現実(Augmented Reality、AR)の入り口でもあります。ARは難しいものではありません。撮影した写真の右下に撮影日を表示するのも、立派なARの1つです。Androidでは、位置情報が取得できるので、そういったものをプレビューにオーバーレイすることも比較的簡単です。
現実世界側の映像情報を解析して拡張する、あるいはクラウド上に蓄積されたデータを位置情報から取得して拡張するなどの方法は、日付けや位置情報をただ表示するのに比べ高度な技術が必要ですが、その分面白い効果が得られます。
Androidアプリはカメラも面白い!
Androidのカメラ制御は、iアプリやS!アプリなどに比べ、使い勝手が格段に良いです。それもそのはず、Androidに標準搭載されているカメラアプリも、今回紹介したAPIと同じものを使用して作られているので、標準アプリと同じレベルのものは作れてしまうわけです。がんばれば、標準カメラアプリを置き換えられるアプリだって作れます。
カメラは写真の撮影だけではなく、プレビューですら用途にあふれています。特にARについては、これから広がっていく分野なので注目に値します。
YouTubeで「Android AR」で検索すると、たくさんの面白いアイデアのデモが見つけられます。興味があれば見てみてください。
- グーグルのAPIを使うときに欠かせないGoogle OAuthの作り方と使い方
- 細か過ぎて伝わってないけど開発者が知っておきたいAndroid Mの新機能まとめ
- 腕時計から電話をかけるAndroid Wearアプリの作り方
- Android Wear用アプリの花形、時計アプリ「Watch Face」の基本的な作り方
- Android 5.0発表&スマホと連動する音声認識Android Wearアプリの作り方
- ウェアラブル端末用Android Wearアプリ開発の基礎知識
- 変わらないと生き残れないAndroid Lの新機能まとめ
- Android WearやIoTで注目のAndroidセンサー機能8選
- ウェアラブル時代に見直したいAndroidの加速度/重力センサー、ジャイロスコープ
- あなたの知らないAndroid SDKの便利tools、14選まとめ
- Android 4.4のメモリ使用状況を把握する3つのツールの使い方
- Androidでリアルタイムマルチプレーゲームを開発するには
- 低性能端末でも使えるか? Android 4.4 KitKatの新機能39選
- もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能
- アプリにGoogle+のソーシャルグラフを持ち込めるGoogle Play Game Servicesの基礎知識
- あなたのアプリはクラウドにデータをバックアップできますか?
- Eclipse ADTに代わるIDEとなるか? Android Studioの基礎知識
- ActionBarで、アプリのUIはこんなにスマートになる
- Android 4.x時代のアプリにないと残念なActionBarとは
- 動的クラスローディングでAndroidアプリ“裏”開発
- Android 4.xのAndroidビームをアプリに組み込むには
- AndroidアプリでNFCタグを読み書きするための基礎知識
- 新タブレット時代を見据えるAndroid 4.2の新機能9選
- Androidからイヤフォンやヘルス機器とBluetooth通信するには
- Bluetoothを使ってAndroidアプリ同士で通信するには
- Androidアプリをアプリ内購読に対応してもうける方法
- 開発者が知らないと残念過ぎるAndroid 4.1の新機能36選
- Androidのプロセス間通信を自由自在にするAIDL
- Android 4.0のサービス/プロセス間通信の基本
- Androidアプリでマルチメディアを扱うための基礎知識
- Androidのウィジェットにノーティフィケーションするには
- Android 4.0で注目の顔認識をアプリに組み込むには
- Android 4.0でアプリ開発を始めるための環境構築
- 開発者が知らないと損するAndroid 4.0の新機能44選
- Android Compatibility packageで2.x系でもマルチサイズ対応
- Androidの画面の大きさの違いを解決するFragments
- Android 3.0の新APIで簡単ドラッグ&ドロップ実装
- 開発者が知って得するAndroid 2.3の新機能18選
- アニメーションでAndroidに独創的な画面エフェクトを
- Androidアプリで“アニメーション”するための基礎知識
- XMLレイアウトでAndroidアプリに“設定画面”を追加
- 開発者が知っておきたいAndroid 2.2の新機能12連発
- もはやケータイに必須のカメラをAndroidで制御しよう
- 地図/位置情報/GPSを使うAndroidアプリを作るには
- Android NDKでJNIを使用してアプリを高速化するには
- Android 2.1の新機能「Live Wallpaper」で作る、美しく燃える“待ち受け”
- iPhoneより多彩なAndroidのセンサをアプリで操作
- SurfaceViewならAndroidで高速描画ゲームが作れる
- Android 1.6のジェスチャーとテキスト読み上げを使う
- Androidのホーム画面に常駐するアプリを作るには
- Netbookにも広まるAndroidで、かつてないWeb体験を
- アプリを国際化してAndroid Marketから世界へ発信
- 常駐アプリが作成できるAndroidの“サービス”とは
- AndroidでSQLiteのDB操作をするための基礎知識
- Androidアプリの使いやすさを左右する5つのレイアウト
- 簡単でワクワクするAndroidウィジェット10連発!
- ブラウザや地図、ストリートビューの基、Intentとは?
- Androidアプリ作成の基本“Activity”とは何か?
- Android Market配布を目指しEclipseでHelloWorld!
Copyright © ITmedia, Inc. All Rights Reserved.