2012年1月28日土曜日

Lala Camera(2)

ほとんどの方には意味不明だと思いますが、ちょっと設計や技術的な話を強引に書きます。

今回のアプリは、JNI で画像処理を試したら期待以上に早かったため、何かそれを活かしたアプリを作ろうとしたのがきっかけで作り始めました。所持機が二年前の初代 Xperia なので、効果も大きかったのだと思います。

Android カメラの preview は、アプリが関与せず SurfaceView を自動更新させるのが普通の使い方ですが、それだと preview に画像処理をかけられないため、一旦アプリ側に画像データを引き上げています。
これを処理して自分で preview を描くわけですが、特殊な画像処理をせず描くだけでも
 YUV → RGB 変換が必要で、Adroid 2.1 で高速におこなうため、この画像処理関連部はすべて JNI を使って native でおこなっています。

onPreviewFrame( byte[] yuvData, Camera camera )
カメラからのコールバックで YUV を受け取り

imageEngine.getImage( yuvData, rgbBuf )
この先は JNI。yuvData を変換・画像エフェクト処理した結果が rgbBuf にセットされます。
エフェクトは選択時に変換テーブルを作成し、以後の処理は高速におこなえるようにしています。

bmp = Bitmap.createBitmap( rgbBuf, width, height, bmpConfig ) : JNI
戻ってきた RGB から Bitmap を作成します。


ロゴの画像認識も同様に JNI を使っています。
写した画像の外周部分を見て基本色を決め、それと色が離れている部分を切り出しますが
ノイズ除去などで適当な計算をガリガリ回して重くなるので、やはり JNI にしました。

ということで、このあたりの画像処理が今回のアプリのメイン部分でしたが、もっと苦労したのは使い勝手の良い UI を考えたりレイアウトに悩んだりする方でした。

色々新しいことをやったので少し Android アプリに慣れました。
開発はわりと時間がかかったので、ダウンロード数は10000くらいは行って欲しい…
と夢見ています。が、今日時点 570 ですw

2012年1月22日日曜日

Lala Camera

昨年から作っていた Android カメラアプリを公開しました。
マーケットには既に山ほどのカメラアプリがありますが、自分の興味先行で作りこんでみました。

(1) 手軽に使えるシンプルなカメラ
小さな写真を撮ってすぐ Twitter などに投稿する用途に絞りました。
起動→撮影→投稿アプリ起動、までが簡単です。

(2) 各種エフェクト処理。プレビュー表示時から有効
趣味の画像処理です。撮影後の写真を開いてエフェクトをかけることもできますが、プレビュー表示中もガリガリ処理してエフェクト表示されます。
以下は水面反射と万華鏡の効果サンプルです。































(3) サインやイラストをキャプチャして合成
何か変わった機能を入れてみたくて作りました。
手書きのサインやイラストを取り込んでロゴを作成し、写真撮影時に合成できます。


















まだ時々バグ修正が続いている状態ですが、よかったら遊んでみてください。無料です。
Lala Camera: https://market.android.com/details?id=net.funnyfaith.lalacamera

次回、少し技術ネタも…