掩盖已移动/缩放的UIImage

时间:2013-02-26 18:09:18

标签: ios uiimage transform masking

我可以完成这样的掩饰:

CGAffineTransform t = self.imageForEditing.transform;

    NSLog(@"x offset: %f, y offset: %f", self.imageForEditing.frame.origin.x, self.imageForEditing.frame.origin.y);
    NSLog(@"scale: %f", sqrt(t.a * t.a + t.c * t.c));

    UIImage *maskImage = [UIImage imageNamed:@"faceMask"];
    UIImage *colorsImage = [self.imageForEditing.image imageRotatedByDegrees:180];

    CGImageRef maskRef = maskImage.CGImage;
    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                             CGImageGetHeight(maskRef),
                                             CGImageGetBitsPerComponent(maskRef),
                                             CGImageGetBitsPerPixel(maskRef),
                                             CGImageGetBytesPerRow(maskRef),
                                             CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef maskedRef = CGImageCreateWithMask(colorsImage.CGImage, imageMask);
    UIImage *maskedImage = [UIImage imageWithCGImage:maskedRef];

您可以在日志语句中看到我可以访问原始图像移动和/或缩放的程度。如何应用此信息以便新的蒙版图像将其考虑在内?想象一下,面具只是屏幕中间的圆形切口。 self.imageForEditing(一个UIImageView)可以移动。创建新图像时,它应该只是通过剪切块可见的部分。上面的代码有效但不考虑底层图像的移动/缩放。

编辑:我认为根据图像视图的当前状态(self.imageForEditing)创建新图像可能更容易。它位于一个容器self.editContainer中。那么我怎样才能根据self.editContainer中包含的当前像素创建一个新图像?

1 个答案:

答案 0 :(得分:0)

最后通过将容器视图渲染为图像,然后使用我发现的UIImage类别来修剪透明像素来解决这个问题。万一它可以帮助某人:

容器uiview上的

    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
相关问题