2012-04-11
2011-06-06
AR的なアプリケーションを作るためのひな形
GitHubの勉強も兼ねて、カメラ画像の上に情報を重ねて表示するサンプルを作ってみました
nunocky/CamView-Overlay ? GitHub
構造はこんな感じで、アクティビティはカメラのプレビュー、オーバーレイ用の2つのビュー、あとはプレビュー画像を受けてデータ処理を行うImageProcessから成っています。
ImageProcessがデータを受けて結果をOverlayに押し込むという単純なものです。処理を別スレッドで行っているので表示が重たくなることはありませんが、あまりスレッド上の処理が遅いと画面とオーバーレイされる結果にずれが生じることになるので、その辺は工夫が必要です。完全に同期させたいならスレッドを使わない方が良いでしょう。
オーバーレイに SurfaceViewを使わなかったのはアクティビティの遷移によってオーバーレイが表示されなくなる不可思議な現象が見られたためで、まあビットマップ1枚出す程度なら Viewでも全然構わないのですが、ここは何とかしたいところです。
2011-06-04
ToyMonitorCam version 0.3.0
昨年作って放置していた走査線エフェクトカメラを知り合いに見せたところ意外にも好評だったので、気に掛けていた機能をGWから 1ヶ月くらいかけて全部乗せて Android Marketに公開しました。
基本的なところは昨年作り終えていましたが、Androidの描画の仕組みとマルチスレッドでの画像生成がうまく連携できなかったり、機種によるカメラの扱いがまちまちなためにクラッシュするなど手持ちの端末で現れないバグに悩まされました。その辺りが落ち着いたところでネイティブコードで3-4倍程度の高速化を果たし、最後にカラー画像に対応しました。
あとは暗視カメラ風とかサーモグラフィ風などのエフェクトを追加する作業がタスクリストに残っていますが、当初の「どんなものでも監視カメラ風に加工していかがわしい映像にする」という目的を果たすカメラは作ることができたので、開発はここらへんで小休止しようかなと思っています。
参考資料
ToyMonitorCam開発時に参考になったWebページをいくつか。
電池残量を取得するのにブロードキャストの受信を使うことを覚えました。
プレビュー画面を作りなおす際に参考にしました。プレビューから画像の生成はスレッドを立ててUIのブロッキングを防いでいたのですが、それだと今度は画面の再描画ができないということでTimerを使って再描画リクエストをUIスレッドに投げるような仕組みが必要でした。
Androidのカメラ周りは本当に鬼門です。 ToyMonitorCamの画像サイズ選択ではカメラのプレビューサイズを取得・変更機能を使っているのですが、「設定不可能なサイズも『使える』と言ってくる」「設定に失敗してフォールバックの設定が内部で行われたのにそれを知る手段がない(getPreviewSize()が虚偽の申告をしてくる)」など、実にf○ckinな状況になっていました。
結局は「使えないサイズのデータベース」を作って選択可能か否かの判定を行うという泥臭いことをしてこの問題を回避しています。
この辺はPreferenceActivityの summaryを動的に変えたいといった時に役に立ちました。そういえばPreferenceActivityのリストではvaluesに文字列しか使えないというのも結構はまりどころだった気がします。
最後はネイティブコードによる高速化について。今回使用した画像エフェクト処理においては、Java側で用意したバッファに対する読み書きだけなのでさほど難しくはありませんでした。一応arm以外のプラットホームでも動かせるように Javaでも同様の処理は実装しておき、x86など ネイティブコードが使えない環境でも動くようにしています。実行時に JNIの有効無効を判定して呼び出すAPIを切り替えています。
2011-03-31
修了: Androidアプリケーション開発ガイド ―HTML+CSS+JavaScriptによる開発手法
大震災の影響でものすごく動揺したり停電で仕事が出来なかったりして、今も計画停電の影響で仕事の時間が制限されたり通勤がバイクと自転車の併用になったりしていますが少しずつ日常を取り戻しつつある関東人です。
震災直後の自宅待機中あたりからはJavascriptやWebアプリケーションの本を現実逃避に読んでました。
Androidアプリケーション開発ガイド ―HTML+CSS+JavaScriptによる開発手法
- 作者: Jonathan Stark,増井俊之(監訳),牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/02/24
- メディア: 大型本
- 購入: 3人 クリック: 119回
- この商品を含むブログ (15件) を見る
これはアプリケーションをWebブラウザで書いて、それをAndroidアプリにそのまま持って行ってしまおうというコンセプトのライブラリ PhoneGapを使えるようになるまでのテキスト。
基本が Webベースの開発なので、デバッグはPC上でChromeあたりを使って行えるのがいい。jQueryを使ったDOMの操作を自由自在に出来るようになるまでには慣れが必要だろうし Android特有の機能を完全に使い切れないといった制約はあるものの、派手な動きを要求しないアプリケーションなら Javaで書くよりもずっと手軽に作れそうな感じ。
2011-03-02
UbuntuデスクトップをWindowsから操作
- Ubuntuに VNCサーバの vinoをインストール (sudo apt-get install vino)
- VNC viewerをWindowsにインストール
- Ubuntuで vino-preferenceを実行 (システム→設定→リモート・デスクトップでもOK)。設定項目が色々出るが IPアドレスだけ控えておく
- WindowsでVNC viewerを起動し、 vino-preferenceで表示されたIPアドレスを入力
- 設定次第ではUbuntu側で「接続要求が来てるけどどうする」と聞かれるので受け入れる
こんなもんで動く。けどアホみたいに遅い。素直に puttyで ssh login
したほうがいい。





