Androidで動く携帯Javaアプリ作成入門
連載インデックスへ
Androidで動く携帯Javaアプリ作成入門(17)

もはやケータイに必須のカメラをAndroidで制御しよう


株式会社イーフロー
緒方聡
2010/5/27

フラッシュやフォーカス、色合いも変えれるカメラAPI

 Camera.Parametersというクラスを使用してカメラの設定ができます。

表 カメラの設定(抜粋)
設定項目 説明
Antibanding 階調の落差に関する設定
ColorEffect 色合いを変更
FlashMode フラッシュの設定
FocusMode フォーカスの動作に関する設定
SceneMode 撮影シーンの設定
WhiteBalance ホワイトバランスの設定
- PR -

 上記以外にも写真に位置情報を入れたり、写真のサイズを変更したり、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を設定した比較です。

図3 左からColorEffectが"non"、"mono"、"sepia"の比較
図3 左からColorEffectが"none"、"mono"、"sepia"の比較

 端末でサポートされているならば、設定するだけで効果が現れるので、とても簡単です。設定画面はプレビューの右上辺りをタッチしてください。

コラム 「カメラ制御の勘所」

カメラを制御するためにCamera.openメソッドでインスタンスを取得しますが、内部ではカメラのサービスに接続を行っています。ほかのアプリがカメラを使っている場合、接続に失敗することがあるのはもちろん、自分のアプリも使い終わったら適切に解放する必要があります。 Camera.open()メソッドはRuntimeExceptionが発生する可能性があり、カメラを使い終える場合はCamera#release()メソッドは忘れてはいけません。

カメラの設定を行う際にも、カメラのインスタンスが必要ですが、設定画面は今回のようにカメラのプレビューを表示させているActivityとは異なる場合があると思います。

この場合、設定画面を呼び出した際に、プレビューのSurfaceViewはsurfaceDestroyedが呼び出されライフサイクルを終了しますが、カメラはCamera#release()を呼び出さずに生かしたままにしておきます。設定画面では、設定した内容を呼び出し元のActivityにIntentとして返し、呼び出し元は戻ってきた際に再びSurfaceViewを生成してカメラにプレビューやコールバックを設定し直し、設定されたパラメータを適用する、という方法を採ると、比較的シンプルになります。

カメラのライフサイクルは、SurfaceViewのライフサイクルと密接な関係を持ちますが、同時にActivityのライフサイクルとも密接な関係を持ちます。今回のサンプルアプリでは、簡単であるため実装していませんが、実際にはActivity#onPause()などで、プレビューを停止し、カメラをリリースする必要があります。

オーバーレイでAR(拡張現実)アプリもできる?

 カメラのプレビューにオーバーレイを重ねて表示させることで、実際に見えている映像に情報を付加することが可能です。

図4 プレビューにオーバーレイを重ねる
図4 プレビューにオーバーレイを重ねる

 サンプルのオーバーレイ機能は、タッチされた場所にロボットを描画するだけの機能ですが、サンプルとしては分かりやすいと思いますので、ソースコードを参照してみてください。

 オーバーレイは、いま流行の拡張現実(Augmented Reality、AR)の入り口でもあります。ARは難しいものではありません。撮影した写真の右下に撮影日を表示するのも、立派なARの1つです。Androidでは、位置情報が取得できるので、そういったものをプレビューにオーバーレイすることも比較的簡単です。

 現実世界側の映像情報を解析して拡張する、あるいはクラウド上に蓄積されたデータを位置情報から取得して拡張するなどの方法は、日付けや位置情報をただ表示するのに比べ高度な技術が必要ですが、その分面白い効果が得られます。

Androidアプリはカメラも面白い!

 Androidのカメラ制御は、iアプリS!アプリなどに比べ、使い勝手が格段に良いです。それもそのはず、Androidに標準搭載されているカメラアプリも、今回紹介したAPIと同じものを使用して作られているので、標準アプリと同じレベルのものは作れてしまうわけです。がんばれば、標準カメラアプリを置き換えられるアプリだって作れます。

 カメラは写真の撮影だけではなく、プレビューですら用途にあふれています。特にARについては、これから広がっていく分野なので注目に値します。

 YouTubeで「Android AR」で検索すると、たくさんの面白いアイデアのデモが見つけられます。興味があれば見てみてください。

@IT関連記事


Java技術者も知っておきたい「AR(拡張現実)」
安藤幸央のランダウン(49)
 実写映像にCGを混ぜるAR技術がiPhone/Androidアプリ、GPS、ゲームなど多方面で流行中だ。「Java技術者には関係ない」と侮るなかれ
Java Solution」フォーラム 2009/11/17
飛び出すFlash、知ってますか?
Flashと人〜あの人からの6つの回答(2) 四角いマーカーをWebカメラ画像から探し出しCGを合成することで、その場にオブジェクトを存在して見せるARToolKitをご存じですか
やっと出た! 公式版のProcessingを動画で確認
絵心がなくても簡単に絵が描けるProcessing(最終回)
 7年の時を経て正式版がリリースされた描画プログラミング環境のProcessing。動画でプログラムを見てみよう
Titaniumで始めるモバイルアプリ作成の基礎知識
Web技術でネイティブアプリを作れるTitanium(2) 
ついに出た1.0版について、その特徴と使い方、開発の勘所を解説します。今後もiPhone開発に使え得るのか注目です

ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします!

1-2-3

 Index
第17回 もはやケータイに必須のカメラをAndroidで制御しよう
  Page1
Google I/OでAndroid 2.2やGoogle TVが発表!
Androidでもカメラを使うアプリは当たり前
まずは、Androidカメラを起動して終了してみる
  Page2
AndroidのAPIで写真撮影をするには
Page3
フラッシュやフォーカス、色合いも変えれるカメラAPI
コラム 「カメラ制御の勘所」
オーバーレイでAR(拡張現実)アプリもできる?

Androidで動く携帯Javaアプリ作成入門 バックナンバー 連載インデックスへ»


ご意見、ご感想は Smart&Social 会議室へどうぞ


 Smart&Social フォーラム トップページへ


TechTargetジャパン

Smart & Social フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH