プラットフォーム:iPhone
ライブラリ:OpenGL ES, iPhone SDK
PNGファイルなどの画像ファイルを読み込んで、生のRGBAデータを取得するプログラムです。このプログラムをビルドするには、CoreGraphicsフレームワークが必要です。
まずは、画像ファイルを読み込むプログラムです。これは、非常に簡単で、関数を呼ぶだけです。filenameに画像ファイル名を指定します。
CGImageRef img = [UIImage imageNamed:filename].CGImage;
これで、画像が読み込めましたが、生データではありません(ポインタでRGBAを参照できない)。読み込んだ画像から生データを取り出します。
size_t w = CGImageGetWidth(img);
size_t h = CGImageGetHeight(img);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(img);
GLubyte* pixels = (GLubyte*)malloc(w * h * 4);
CGContextRef context = CGBitmapContextCreate(pixels, w, h, 8, w * 4, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextDrawImage(context, CGRectMake(0, 0, (CGFloat)w, (CGFloat)h), img);
CGContextRelease(context);
size_t h = CGImageGetHeight(img);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(img);
GLubyte* pixels = (GLubyte*)malloc(w * h * 4);
CGContextRef context = CGBitmapContextCreate(pixels, w, h, 8, w * 4, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextDrawImage(context, CGRectMake(0, 0, (CGFloat)w, (CGFloat)h), img);
CGContextRelease(context);
CGBitmapContextCreate関数で、contextとpixelsを関連づけています。つまり、contextに対して描画すると、pixelsが書き換えられるというわけです。そこで、CGContextDrawImage関数で、読み込んだ画像imgをcontext(つまり、pixels)に描画しています。生データ(pixels)が手に入ればcontextはいらないので、CGContextRelease関数で破棄します。
以上です。
いろいろな関数を使ったので、後でリファレンス記事を書こうかな。