我有UIImageView
可以移动/缩放(self.imageForEditing
)。在这个图像视图的顶部,我有一个带有孔的覆盖层,它是静态的,不能移动。我需要保存按下按钮时通过孔可见的底层图像部分。我目前的尝试:
- (IBAction)saveImage
{
UIImage *image = self.imageForEditing.image;
CGImageRef originalMask = [UIImage imageNamed:@"picOverlay"].CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(originalMask),
CGImageGetHeight(originalMask),
CGImageGetBitsPerComponent(originalMask),
CGImageGetBitsPerPixel(originalMask),
CGImageGetBytesPerRow(originalMask),
CGImageGetDataProvider(originalMask), nil, YES);
CGImageRef maskedImageRef = CGImageCreateWithMask(image.CGImage, mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef scale:image.scale orientation:image.imageOrientation];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
UIImageView *test = [[UIImageView alloc] initWithImage:maskedImage];
[self.view addSubview:test];
}
作为测试,我只是尝试将新创建的图像添加到屏幕的左上角。从理论上讲,它应该是一个小圆形图像(通过叠加层可见的部分)。但我只是重新创建了整个图像。我究竟做错了什么?我如何解释self.imageForEditing
可以移动的事实?
答案 0 :(得分:0)
CGImageCreateWithMask
返回与原始图像大小相同的图像。
这就是为什么你得到原始图像(我假设)与应用蒙版。
您可以应用蒙版然后删除不可见的边框。使用此问题的建议:iOS: How to trim an image to the useful parts (remove transparent border)
找到图像的非透明部分的边界并将其重新绘制成新图像。