通过另一个图像掩盖图像

时间:2010-09-03 04:05:07

标签: iphone image uiimage masking

好吧,我想做的是:

  • 给出一张图像,其中该图像中有一个“空白”的圆圈。我想从用户库中获取现有图像,然后将其屏蔽,以便只有该图像的某个部分显示在“空白”图像上。

我尝试了一些屏蔽代码,但它们似乎都在反过来......有关如何解决这个问题的任何提示吗?

1 个答案:

答案 0 :(得分:5)

不幸的是,您不能使用 CoreAnimation 来执行此操作(这会使其变得相当简单)。 看看Apple的CoreAnimation documentation

  

iOS注意:作为性能考虑因素,iOS不支持遮罩属性。

因此,下一个最好的方法是使用Quartz 2D(已回答here):

CGContextRef mainViewContentContext;
CGColorSpaceRef colorSpace;

colorSpace = CGColorSpaceCreateDeviceRGB();

// create a bitmap graphics context the size of the image
mainViewContentContext = CGBitmapContextCreate (NULL, targetSize.width, targetSize.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);

// free the rgb colorspace
CGColorSpaceRelease(colorSpace);    

if (mainViewContentContext==NULL)
    return NULL;

CGImageRef maskImage = [[UIImage imageNamed:@"mask.png"] CGImage];
CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, targetSize.width, targetSize.height), maskImage);
CGContextDrawImage(mainViewContentContext, CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledWidth, scaledHeight), self.CGImage);


// Create CGImageRef of the main view bitmap content, and then
// release that bitmap context
CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);

// convert the finished resized image to a UIImage 
UIImage *theImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
// image is retained by the property setting above, so we can 
// release the original
CGImageRelease(mainViewContentBitmapContext);

// return the image
return theImage;