我可以像这样完成掩蔽:
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 (a UIImageView) 可以移动。创建新图像时,它应该只是通过切口可见的部分。上面的代码有效,但没有考虑底层图像的移动/缩放。
编辑:我认为根据图像视图的当前状态(self.imageForEditing)创建一个新图像可能更容易。它位于一个容器 self.editContainer 中。那么如何才能根据 self.editContainer 中包含的当前像素创建一个新图像呢?