私は Objective-C を初めて使用しますが、UIImage を固定サイズの正方形のブロックに分割し、それらを混合する高速なメソッドを作成する必要があります。私はすでに次の方法でそれを実装しています:
- UIImage を取得する
- PNGで表現する
- それを RGBA8 unsigned char 配列に変換します
- ブロックごとに座標を計算し、各ピクセルをブロックのピクセルと xor で置き換えます。
- その RGBA8 肉を新しい UIImage に組み立てます
- 返却する
意図したとおりに動作しますが、非常に遅いです。iPhone 4S で 1024x768 PNG を 1 つ処理するのに約 12 秒かかります。Inspector は、何らかの方法で PNGRepresentation に接続されているメソッドが、合計実行時間の約 50% を消費していることを示しています。
ここで何らかの方法で Quartz2D を使用すると、おそらく高速になりますか? 私は今、単一の長方形を _image との間でコピー/貼り付けようとしていますが、さらに先に進む方法がわかりません。blockLayer を内部に貼り付けずに、提供された _image をそのまま使用して UIImage を返します。
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 1.0);
CGContextRef context = UIGraphicsGetCurrentContext();
/* Start drawing */
//Draw in my image first
[_image drawAtPoint:CGPointMake(0,0) blendMode:kCGBlendModeNormal alpha:1.0];
//Here I am trying to make a 400x400 square, starting presumably at the origin
CGLayerRef blockLayer = CGLayerCreateWithContext(context, CGSizeMake(400, 400), NULL);
//Then I attempt to draw it back at the middle
CGContextDrawLayerAtPoint(context, CGPointMake(1024/2, 768/2), blockLayer);
CGContextSaveGState(context);
/* End drawing */
//Make UIImage from context
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;