1

私は Objective-C を初めて使用しますが、UIImage を固定サイズの正方形のブロックに分割し、それらを混合する高速なメソッドを作成する必要があります。私はすでに次の方法でそれを実装しています:

  1. UIImage を取得する
  2. PNGで表現する
  3. それを RGBA8 unsigned char 配列に変換します
  4. ブロックごとに座標を計算し、各ピクセルをブロックのピクセルと xor で置き換えます。
  5. その RGBA8 肉を新しい UIImage に組み立てます
  6. 返却する

意図したとおりに動作しますが、非常に遅いです。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;
4

1 に答える 1

2

次の手順に従って、必要なことを行うことができます。

于 2012-07-03T18:58:33.803 に答える