ほとんどの方には意味不明だと思いますが、ちょっと設計や技術的な話を強引に書きます。
今回のアプリは、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