iPhone Как обрезать круг внутри круга? - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть два круга, один больше, а другой меньше.Я хочу вырезать меньший круг из большего, а затем использовать эту новую форму (большой круг с отверстием в нем), чтобы применить его к произвольному изображению.Я немного поиграл с кварцем, но не смог найти решение этой проблемы.Есть ли простой способ сделать это?

1 Ответ

1 голос
/ 13 декабря 2011

вот код, который я получил от 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;
}
...