2012-03-14

【Androidアプリ】微速度撮影カメラ作ってみた。

Androidスマートフォン(Infobar A01)を買いました。
このスマートフォンにはカメラもついています。そこで、Androidアプリ開発になれるためにほしかった「微速度カメラ」を作ることにしました。

この「微速度撮影機能(インターバル撮影ともいいます)」とは、設定した間隔で自動でシャッターを切ってくれる機能のことで撮影した画像ファイルをぱらぱら漫画の要領で映像に変換すると早回し編集をしなくても面白い映像を作ることができます。
テストで撮影した動画は以下の通りです。



・仕様
対応機種  :Infobar A01 (他にテストできる実機がないため)
対応OSVer :2.3.3(他にテストできる実機がないため)
画面の向き:横のみ
画像保存場所:SDカード内、「DCIM/lapse」以下に保存
画像ファイル名:「yyyymmdd_hhmmss.jpg」

・使い方
1)「設定変更」ボタンをクリック
2)「画像解像度」、「シャッター間隔」、「撮影時間」を設定して「設定する」ボタンをクリック。設定は保存され、次回起動時には前回起動時の設定に自動的に変更されます。
3)「設定する」ボタンをクリックすると、自動的に前の画面に戻りますので「撮影開始」ボタンクリックで撮影開始します。
4)撮影を途中でやめるときは「撮影終了」ボタンをクリックします。


・スクリーンショット
撮影画面:
 設定画面:

・機能
1)スマートフォンのカメラに対応した画像サイズを設定可能
2)シャッター間隔は5、10、15、30、45、60、90、120秒に設定可能
3)撮影時間は1、5、10、15、30、45、60、90、120、180、240分に設定可能

・ダウンロード
Gumroad 微速度撮影カメラアプリ
Androidマーケット 微速度撮影カメラアプリ

・プログラム作成時に躓いたところ
1)ActivityクラスがJavaアプレットのようにライフサイクルによりイベントが発生する形式なので、Cameraクラスのメソッドreleaseを実行した後にtakePictureを実行してしまったりした。
2)Activityクラスは画面の傾きにより縦と横に向きが変わるが、そのたびに「onDestroy」と「onCreate」が発生しめんどくさい。
3)「メソッドの引数」と「クラスのメンバ」が「同じ名前」のときに、無名クラスからその名前を使うときは、引数にfinal修飾子が必要なこと
4)無名クラスから、その無名クラスを定義しているクラスの参照したいときには「無名クラスを定義しているクラス名.this」と書くこと
5)ぱっと見、スタックトレースやエラーメッセージの見方がわからないこと
6)実装の都合からActivityが1つしかないので、AlertDialogすら出すのに苦労すること。
7)TableLayoutで使うTableRowには「行の結合」ができないこと。

ZenBack

WebMoney ぷちカンパ