調べ中ですが。忘れぬようメモを書いておきます。
リアルタイムに画像処理をする方法を調べてました。
処理方法は大きく2つ。
1. UIImageを変更して、UIImageViewに反映させる
2. OpenGLESのテクスチャに貼付けて、テクスチャ画像に更新をかける
1は実装が比較的楽な方法。だけど実行速度が遅い。CPUによる計算。
2は実装が難しい方法。だけど実行速度が速い。GPUによる計算。
UIImageを変更して、UIImageViewに反映させる
実践! iPhoneアプリ開発 カメラアプリの作り方 (4) – 写真にエフェクトをかける
本も出している木下さんによる解説。
CGImageRef > CGDataProviderRef > CFDataRefと分解していき、画像データのコピーを確保。
各ピクセルの色情報にアクセスして、変更を加える。
あとは、コピーデータをもとに、分解と逆順でCGImageRefまで作っていったあと、UIImageを生成する。
各ピクセルにアクセスしているときに、RGBAではなく、ABGRという逆順でデータが保持されているところに注意する。何で逆順なのかはわかんない。リトルエンディアン?
もう一つ分解しない方法。
brandontreb.com Image Manipulation: Retrieving And Updating Pixel Values For A UIImage
Brandon Trebitowskiさんによる作成方法。
こちらは、値変更用のCGContextRefを作って、各ビットにアクセス。さらに画像作成用にもう一回CGContextRefを作ってからCGImageRefを作成というパターン。
OpenGLESのテクスチャに貼付けて、テクスチャ画像に更新をかける
AppleのSample codeを参考にする。これはOpenGLES1.1バージョン。
基本的なカラーエフェクトが全て入っているすごいサンプルコード。
POTはPower Of Two(2のN乗)の略だと思われ。
—
あと、エフェクト処理の基本的な考え方。サンプルコードからリンクされている。
どちらもPaul Haeberliさんによるもの。
Image Processing By Interpolation and Extrapolation
元画像とエフェクト用の画像をアルファブレンドするとよい。
Matrix Operations for Image Processing
RGBも4×4行列で制御できまっせ。
—
さらに、これを押し進めてGPUによる画像処理のフレームワークを作成した人がいた。
Brad Larsonさんによるもの。
GPUImage framework
UIViewを継承したGPUImageViewに設定すればエフェクトがかけられるみたいだけど、試してない。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ