2011-12-13 11 views
0

私は大きなものと小さいものの2つの円を持っています。私は大きなものから小さな円を切り取り、その新しい形(それに穴がある大きな円)を使って任意の画像に適用したいと思います。私は石英で少し演奏しましたが、これに対する解決策は見つかりませんでした。これを行う簡単な方法はありますか?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; 
} 
関連する問題