photoiPhoneカメラの解像度は画面サイズよりもずいぶん高解像度なので、オフスクリーンバッファに縮小描画してから表示、的な手法を使います。

実はこれ、フツーのアプリケーションでもかなり有効に使える手法です。

今作っているアプリは背景画像の上に幾つか部品的な画像を重ねて表示していたのですが、部品にあたる画像は最初の位置こそ重要ですが、それ以降ピクリとも動きません。だったらあらかじめ重ねた画像を用意すればいいじゃん、という訳でオフスクリーンバッファの出番となる訳です。


CGSize size = { 320, 480 };
UIGraphicsBeginImageContext(size);

// オフクリーンに対して好き勝手描画できる
UIImage *img = [UIImage imageNamed:@"hoge.png"];

[img drawAtPoint:CGPointZero];

CGRect rect;
rect.size.width = 50;
rect.size.height = 100;
rect.origin = CGPointMake(100, 100);
[img drawInRect:rect];

// オフスクリーンからUIImageView を生成して表示
UIImage *offScreen = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageView *imageView = [[UIImageView alloc] initWithImage:offScreen];
[self.view addSubview:imageView];
[imageView release];


たったこれだけ。実装が簡単な割に効果は大きいです。用意した画像のような事が簡単に実現できます。

ゲーム機で同じような事をやろうとすると、VRAMやテクスチャバッファの管理がとてもメンドーでコストがかかるのですが、iPhoneはそれを意識させない作りになっていて本当に楽。これは、長い年月を掛けて培われたAPI群があればこそだと思います。

PS2ももう10年。ゲームデベロッパ的にようやく環境が整った所でPS3とかへの移行を迫られると、開発基盤の無い所は辛いのよ(涙)

空気を読めてた所はPS時代から準備を始めてて、いまようやく楽できてるんじゃないかな。そういう開発環境に対するコスト意識の低い現場は軒並みアップアップしとるそうですが。