0

我正在使用 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;
}

draw rect 运行 3 次后,日志输出为

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 应用程序,所以可能很明显。

4

1 回答 1

0

我认为这是您的程序逻辑:

起初,_selectedImage是空的。因此,蒙版创建了一个圆圈。

现在你_selectedImage已经包含了圆圈。所以第二次你的圈子会被面具归零。

--> 预期行为。如果您没有预料到,也许您想阅读 Core Graphics 遮罩功能。

于 2012-12-16T17:14:53.543 回答