我正在使用CGImageMaskCreate创建一个蒙版图像,它在第一次调用时工作正常。但是,当从drawRect第二次调用相同的函数时,创建的蒙版图像为空。
- (void)drawRect:(CGRect)rect{
UIImage *maskImage = [UIImage imageNamed:@"circle.png"]; //This will be replaced
UIImage *maskedImage = [self maskImage:_selectedImage withMask:maskImage];
_selectedImage = maskedImage;
[_selectedImage drawInRect:rect];
}
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
UIImage *result = [UIImage imageWithCGImage:masked];
NSLog(@" MASK >> RETURNING %@ %f %f",
result.description, result.size.width, result.size.height);
return result;
}
绘制后,rect已运行三次,日志的输出为
MASK >> RETURNING UIImage: 0x903d720 320.000000 480.000000
MASK >> RETURNING UIImage: 0x73660c0 0.000000 0.000000
MASK >> RETURNING UIImage: 0x90f7390 0.000000 0.000000
因此,在第二次调用后,看起来被遮挡的图像是空的。
帮助会很棒,这是我的第一个IOS应用程序,所以也许这是显而易见的。
答案 0 :(得分:0)
我认为这是你的程序逻辑:
首先,_selectedImage
为空。因此,面具创建一个圆圈。
现在,您的_selectedImage
已包含该圈子。所以你的圈子第二次被掩码归零。
- >预期的行为。如果您没想到,也许您想要阅读核心图形屏蔽功能。