在UIImage中顺序移动方块

时间:2012-07-03 18:18:01

标签: objective-c ios uiimage quartz-2d cgcontextref

我是Objective-C的新手,但我需要编写一个快速方法,将UIImage划分为固定大小的方块,然后混合它们。我已经通过以下方式实现了它:

  1. 获取UIImage
  2. 将其表示为PNG
  3. 将其转换为RGBA8 unsigned char数组
  4. 对于每个块,计算它的坐标,然后xor每个像素与来自被替换的块的像素
  5. 将RGBA8肉组装回新的UIImage
  6. 退货
  7. 它按预期工作,但速度极慢。在iPhone 4S上处理单个1024x768 PNG大约需要12秒。 Inspector显示方法以某种方式连接到PNGRepresentation,占用总运行时间的约50%。

    如果我在这里以某种方式使用Quartz2D,它可能会更快吗?我现在只是试图从我的_image复制/粘贴一个矩形,但我不知道如何进一步。它返回一个UIImage,其中_image按原样提供,没有粘贴blockLayer:

    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;
    

1 个答案:

答案 0 :(得分:2)

您可以按照以下步骤执行操作:

  • 加载图片
  • 将其拆分为正方形 how?
  • 为每张图片创建CALayer,在洗牌之前将位置设置为图片中方块的位置
  • 浏览图层,并在改组后将其位置设置为目标位置
  • 观看广场移动到新的地方 what if you don't want the animation?