2011-12-13 3 views
0

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

ответ

1

вот какой код я получил от 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; 
} 
Смежные вопросы