[iOS]Image Masking | Cocoa練習帳

[iOS]Image Masking

表示したい画像とマスクの画像を用意する。




pict




mask

それを以下のコードでマスクした画像を取得し、描画する。




- (void)awakeFromNib
{
    self.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"pict.png" ofType:nil]];
    self.mask = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"mask.png" ofType:nil]];
    self.imageMaskedWithImage = [self maskImage:self.image withMask:self.mask];
}
 
- (void)drawRect:(CGRect)rect
{
    [self.imageMaskedWithImage drawAtPoint:CGPointMake(10.0, 10.0)];
}
 
- (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 masked = CGImageCreateWithMask([image CGImage], mask);
    CGImageRelease(mask);
    return [UIImage imageWithCGImage:masked];
}


実行。




run




画像のマスクについては、まだまだ、ほんの一部だと思っているので、機会があったら続きを試してみたい。




ソースコード
GitHubからどうぞ。

https://github.com/murakami/workbook/tree/master/ios/ImageMasking - GitHub


関連情報
Programming with Quartz: 2D and PDF Graphics in Mac OS X

WWDCでも薦められていた書籍です。

How to Mask an Image