2011年12月13日火曜日

iPhoneにおける画像処理

iPhoneにおける画像処理のやり方についてです。
iOS5になってCIImageが導入された事もあり、いくつかの選択肢があります。

例えば、Instagramのような色変換とかブラーならCIFilterを使う事で実現できます。

リアルタイムな処理をしようと思うとAVFoundationを用いて、その中で各フレームごとのバッファを投げてくれるメソッドがデリゲートにあるので、それを用いる事で何かしらの処理が出来ます。
メソッド名:captureOutput:didOutputSampleBuffer:fromConnection:

高速な実装を実現しようと思うと、GLESを使ったGPGPUという選択肢になると思います。
Appleのサンプル、GLCameraRippleはかなり高速に描画できていて驚きました。
サンプルソース

二つ目の方法で、画素単位まで触る事ができるけど実時間でなにかを使用と思うと、
とてもスピードが遅くなってしまいます。
なので、重ための画像処理をしようと思ったらGLESを学ぶしかないのかなー

2011年12月4日日曜日

Network activity indicator + NSURLConnection

iOSの通信中のサインとして、ステータスバーに表示されるあのクルクル回る奴
あれは Network activity indicator と呼ぶのですがあの表示は簡単にできます

    
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

もちろん、消すのも簡単にできます。
    
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

ネットワーク通信中を表すのによく使うんですが、
NSURLConnectionとかを使っていっぺんに複数の画像をDLしたりすることがありますよね。
そのときにDLを開始したときにインジゲータを表示して、全部のDLが終わったときにインジゲータを消したいと思います。

そういったときの対処法ですが、以下のURLにその答えが載っていました。
http://akira108.com/blog/?p=6

NetworkActivityIndicatorを管理するシングルトンクラスを作ってやって、インジゲータのカウンタを作ってやって管理します。
カウンタが1以上になると表示して、0になると消す。
インジゲータを表示するタイミングで、カウンタをインクリメント
消去するタイミングでカウンタをデクリメントさせるという使い方です!