[iOS] 生のbitmapdataの扱いのメモ

2012/04/25

調べ中ですが。忘れぬようメモを書いておきます。

リアルタイムに画像処理をする方法を調べてました。
処理方法は大きく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バージョン。

GLImageProcessing

基本的なカラーエフェクトが全て入っているすごいサンプルコード。
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アプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る