アーカイブ

2011年 7月 20日 のアーカイブ

作りかけ
http://wantech.ikuto.com/software/CameraDS.apk

なんかニンテンドーみたいな名前になっちゃったが、DellのStreak向けカメラと言う事でDSと。
(検索したら似た名前が出てきたので変更予定で。)
で、マーケットにあるカメラじゃ何が不満で自作してるのか、どこまで作ったかと言う事について。

まず、ほとんどのカメラアプリはフル画面でプレビューしてるんだけど、
Streakはディスプレイが4:3ではないので、プレビューがそのまま写真と同じにならない。
標準で入ってるカメラアプリはたぶん640×480のプレビューを出してて、出来上がりと同じになってる。
少なくともこの標準カメラのように、タテヨコ比を考えたプレビューを出したい。

じゃあ標準のカメラを使えばいいのかというと、標準のカメラには手ぶれ感知機能がない。
といっても、被写体が動いてたりピントが合ってなかったりはよくあるが、手ぶれの失敗はあまりなく、
あんまり厳しく手ぶれ感知はしなくても良いから、シャッター待ちでイライラさせないで欲しい。
マーケットにあるカメラは、Streakで使ってるとなかなか手ぶれが治まらずイライラする物が多い。
自分で作るカメラアプリの前提として、まず絶対手ぶれ防止は付けるが、
自分で使ってイライラしない程度のゆるい物って言う条件も必要だ。

それでこのCameraDSでは独自で工夫したんだが、シャッターボタンを押したとき、
まずオートフォーカスを発動させ、フォーカス中に極端に動いたときはフォーカスやり直しとし、
極端に動かなかったときはそのままシャッターが発動するようにした。
手ぶれ防止のために少しは待つ事が前提なので、オートフォーカスを待てないほどだと対象外だ。
しかしせっかくフォーカスしてる間に動いてたら、もちろんフォーカスはやり直すべきだし、
やり直すほどじゃないならそのまま取っちゃえっていう発想だ。
よその手ぶれ防止だと、フォーカス時間関係なしに、一定時間の手ぶれ停止を計測してるし、
その一定時間が長すぎてなかなか止まってられないしで困る。
でもStreakのオートフォーカスに費やす時間はちょうど良く、この短い時間だけ停止すればいい事にした。
ただ、数字的にいくら以下を停止と見なすかは決まった基準がなく、
これも手元のStreakでこんなもんだろうと思える数字で調節してやってる。
すなわち、他の機種ではオートフォーカスの時間も加速度センサーの反応も違うだろうから、
この根本的な部分でStreak専用とならざるを得ない。
あ、まず他の機種にはシャッターボタンがないか。

また、この加速度センサーってのは、もしかしたら調子が良いときと悪いときがあるのかも知れないと、
いろんなカメラアプリを触ってて思った。
いや、センサーではなく使ってる人間の調子かも知れないし、そりゃわからないからどっちでも良いが、
そういうときにいちいち手ぶれ防止オフにして使ったり、またオンにしたりって言うのが面倒くさい。
そこで、これも独自で工夫したところだが、シャッター押しっぱなしは手ぶれ防止撮影にし、
シャッターを離した場合は、その時点で手ぶれしてようがフォーカスしてなかろうが、
すぐ撮影できるっていう仕様にした。
すなわち、とりあえずシャッター押しっぱなしで待ってみて、もし待てなくなったらシャッターを離せばいい。
調子の良い時は自動で手ぶれを防止し、調子の悪いときは自動で普通の撮影を行う。

いやもうここまで作っただけで既に、他のどんなカメラより便利になってると自分では思ってるんだが、
たぶん自分以外の人が使うと謎仕様シャッターで意味不明なんだろうな。

その問題のシャッターボタンだが、多くのカメラアプリではシャッターではなくフォーカスボタンとして動作する。
これ、あたしのStreakがカスタムROMから戻せなくなったせいなのか?
純正ROMではカメラアプリでシャッターとして動くんだろうか?
いずれにせよあたしのStreakでは、このボタンを押すとキーコード80番のフォーカスが投げられる。
あたしが使うためのアプリだから、この80番で動作する仕様で作る。
本来はキーコード27番のカメラが正しいと思うし、純正ROMでは正しく動作してるかもしれない。
将来純正ROMに戻せる日が来るかも知れないので、27番にも対応する予定。
また、スクリーンタッチでのシャッターにも対応予定。

Androidでも様々なカメラアプリが出てるので、マーケットにあるやつをいくつか試してみたけれども、
どうしてもこれぞと思える物がない。
人気なのは様々な加工を施せるカメラアプリなんだが、あたしは加工は加工の専門アプリを使って、
撮影に関しては撮影に適したアプリをと使い分けても良いと思ってるんだが、
ともかく撮影機能で満足と言うアプリがない。
と言うのも、AndroidはiPhoneと違って、一つのアプリが様々なハードをターゲットにしてるので、
自分のハードでは利用出来ない機能が山盛り付いてたり、逆に自分のハードを活かせなかったりする。
その中でも最もわかりやすいのは、Streakの場合は物理的なシャッターボタンが付いているのに、
マーケットにあるアプリはシャッターボタンを押しても撮影できないって事だ。
画面タッチで撮影できるのも便利だけれども、ボタンが一個死んでるのはどうしても気になっちゃう。
他にも、手ぶれセンサーの感度がどうしても馴染めず、
センサーは使いたいけど使うといつまで経ってもシャッターが落ちないとかで、
結局他のアプリのセンサーはどうだろうかとまた彷徨うことになる。
でもこれは複数ハードに単一アプリが対応する事の難しさが露呈した物であって、
将来的にも自分にあったカメラという物をマーケットから探すのは難しいだろうと思う。

そこでもう自作しちゃおうと軽い気持ちでやってみたのだが、
思い立ったその日にはもう、シャッターボタンでjpgファイルの保存が出来るアプリが実機で動いてる。
iPhoneではハローワールドの実機動作までの敷居が高すぎて、
いざ動き始めても何か作ろうという気が起らなかったが、
Androidでは無料の開発環境でチョチョイのチョイとビジュアル開発が出来ちゃう。
しかもタダ。
いや、自分で使うためのアプリを作るだけでも登録料を取るiPhoneの方がおかしいのであって、
もともとあたしはスマホ用のアプリをタダで作ってみるつもりだったから、これが正しい姿だ。

開発環境はネイティブコードとJavaがあり、とりあえずは簡単そうなJavaを使ってみた。
言語はC♯とほとんど一緒だし、eclipseはVSと同等以上に使いやすく、すぐなんでも作れる。
一応仮想マシンでも動作確認できるようだが、なんせカメラアプリを作ってるんだから、
実機じゃないと再現できないジャンルと言う事で、仮想マシンは使ってない。
まだ使い始めたばかりだからわからないだけかも知れないが、VSのMSDNに相当するヘルプがなく、
わからないことをいちいちググってたら、ネットで公開されてるサンプルコードがたくさんでてきたので、
そういうのを次々にコピペして組み合わせて、すぐに実機で動くものが作れた。

マーケットに気に入った物がないからという理由で作るわけだから、
作りたい物の理想はそれなりに高く、どこまで実現できるかまだわからないが、
ある程度出来たらフリーで公開するつもりでいる。
ただ、自分のStreak用に作ってるわけで汎用性は低い。
なんせカスタムROMを入れたら元に戻せなくなった一台きりの端末向けだから、
純正ROMで動くのかも確かめられないし、バージョンの違う物で動くかどうかもわからない。
しかもカメラだから仮想マシンで動作確認できないし。