ユーザーが特定の一連の写真フィルターを適用できる iOS アプリケーションに取り組んでいます。各フィルターは基本的に、特定のパラメーターを持つ Photoshop アクションのセットです。このアクションは次のとおりです。
- レベル調整
- 輝度コントラスト
- 色相・彩度
- 単一および複数のオーバーレイ
画像内のすべてのピクセルをループする算術式を使用して、コードでこのすべてのアクションを繰り返しました。しかし、iPhone 4 でアプリを実行すると、各フィルターの適用に約 3 ~ 4 秒かかり、ユーザーが待機するのにかなりの時間がかかります。画像サイズは 640 x 640 px で、Retina ディスプレイに表示されるため、私のビュー サイズの 2 倍です。私の主な問題は、ガンマを調整する必要があるたびに pow() C 関数を呼び出すレベルの変更であることがわかりました。もちろん、ARMv6 と ARMv7 は double では遅いため、double ではなく float を使用しています。Thumb を有効または無効にしようとしましたが、同じ結果が得られました。
私のアプリで最も単純なフィルターの例ですが、かなり高速に実行されます (2 秒)。他のフィルターにはより多くの式と pow() 呼び出しが含まれているため、処理が遅くなります。
https://gist.github.com/1156760
高速な画像変更のために Accelerate Framework vDSP マトリックス変換を使用しているソリューションをいくつか見てきました。OpenGL ES ソリューションも見てきました。それらが私のニーズに対応できるかどうかはわかりません。しかし、おそらく、一連の変更を適切な畳み込み行列に変換するだけの問題でしょうか?
どんなアドバイスも役に立ちます。
ありがとう、
アンドレイ。