iPhone如何剪切圈内的圆?

问题描述:

我有两个圈,一个大一个小。我想从较大的一个剪下较小的圆,然后使用新的形状(带有大洞的大圆圈)将其应用于任意图像。我玩过一点石英,但找不到解决办法。有没有简单的方法来做到这一点?iPhone如何剪切圈内的圆?

这是我从stackoverflow获得的一些代码。你可以调用它来创建一个带孔掩模的图像,然后再次调用它来使用该图像来掩盖源图像。

- (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 sourceImage = [image CGImage]; 
    CGImageRef imageWithAlpha = sourceImage; 
    //add alpha channel for images that don't have one (ie GIF, JPEG, etc...) 
    //this however has a computational cost 
    // needed to comment out this check. Some images were reporting that they 
    // had an alpha channel when they didn't! So we always create the channel. 
    // It isn't expected that the wheelin application will be doing this a lot so 
    // the computational cost isn't onerous. 
    //if (CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNone) { 
    imageWithAlpha = CopyImageAndAddAlphaChannel(sourceImage); 
    //} 

    CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask); 
    CGImageRelease(mask); 

    //release imageWithAlpha if it was created by CopyImageAndAddAlphaChannel 
    if (sourceImage != imageWithAlpha) { 
     CGImageRelease(imageWithAlpha); 
    } 

    UIImage* retImage = [UIImage imageWithCGImage:masked]; 
    CGImageRelease(masked); 

    return retImage; 
}