石英2D图像alpha掩蔽

时间:2012-06-30 20:34:25

标签: ios ios5 quartz-2d

发现这个小代码片段看起来像我想要的那样,但我被xcode称为self.CGimage并不是我的视图控制器的属性。 (这是有意义的,因为那是一个UIimage属性)。我需要对此代码进行哪些更改才能使其正常运行?谢谢!

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGContextRef mainViewContentContext;
    CGColorSpaceRef colorSpace;
    UIImage* tempImage;

    colorSpace = CGColorSpaceCreateDeviceRGB();

    // create a bitmap graphics context the size of the image
    mainViewContentContext = CGBitmapContextCreate (NULL, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);

    // free the rgb colorspace
    CGColorSpaceRelease(colorSpace);

    CGImageRef maskingImage = [maskImage CGImage];
    CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, maskImage.size.width, maskImage.size.height), maskingImage);
    CGContextDrawImage(mainViewContentContext, CGRectMake(0, 0, image.size.width, image.size.height), self.CGImage);

    // Create CGImageRef of the main view bitmap content, and then
    // release that bitmap context
    CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);

    // convert the finished resized image to a UIImage
    UIImage *theImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
    // image is retained by the property setting above, so we can
    // release the original

    CGContextRelease(mainViewContentContext);
    CGImageRelease(mainViewContentBitmapContext);
    maskingImage = nil;
    CGImageRelease(maskingImage);
    // return the image
    return theImage;

}

2 个答案:

答案 0 :(得分:0)

尝试将self.CGImage替换为image.CGImage

答案 1 :(得分:0)

将此方法放在UIImage类别(或子类)中。