Cocoa touch 掩蔽图像
我正在开发一个可以更改边框或矩形图像的应用程序。边框会有所不同,但看起来像是用剪刀或类似的东西剪下的 最好的方法是什么Cocoa touch 掩蔽图像,cocoa-touch,uiimage,core-graphics,transparent,mask,Cocoa Touch,Uiimage,Core Graphics,Transparent,Mask,我正在开发一个可以更改边框或矩形图像的应用程序。边框会有所不同,但看起来像是用剪刀或类似的东西剪下的 最好的方法是什么 我的第一个想法是准备一束具有我想要的正确边界效果的透明PNG,然后用它作为我的UIImage的遮罩。这条路对吗?还是有更灵活的编程方式来实现这一点?是的,这正是您需要做的。最好的方法是使用核心图形;Quartz 2D编程指南有一个。您可以通过CGImage属性从UIImage对象获取cgimagerf(这些核心图形方法使用的),然后从更改的(屏蔽的)对象获取UIImagecgi
我的第一个想法是准备一束具有我想要的正确边界效果的透明PNG,然后用它作为我的UIImage的遮罩。这条路对吗?还是有更灵活的编程方式来实现这一点?是的,这正是您需要做的。最好的方法是使用核心图形;Quartz 2D编程指南有一个。您可以通过
CGImage
属性从UIImage
对象获取cgimagerf
(这些核心图形方法使用的),然后从更改的(屏蔽的)对象获取UIImage
cgimagerf
使用UIImage
类方法+imageWithCGImage:
以下是可用于屏蔽图像的核心图形调用:
//Mask Image
UIImage *inputImage = [UIImage imageNamed:@"inputImage.png"];
CGImageRef maskRef = [UIImage imageNamed:@"mask.png"].CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([inputImage CGImage], mask);
CGImageRelease(mask);
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
我写了一篇文章,介绍了我如何在自己的应用程序中使用它 下面的示例代码应该可以帮助您入门,它需要原始图像和遮罩图像作为输入,并返回遮罩图像作为输出
- (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask
{
CGImageRef imageReference = image.CGImage;
CGImageRef maskReference = mask.CGImage;
CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference),
CGImageGetHeight(maskReference),
CGImageGetBitsPerComponent(maskReference),
CGImageGetBitsPerPixel(maskReference),
CGImageGetBytesPerRow(maskReference),
CGImageGetDataProvider(maskReference),
NULL, // Decode is null
YES // Should interpolate
);
CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask);
CGImageRelease(imageMask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
CGImageRelease(maskedReference);
return maskedImage;
}
还有另一种使用路径的方法。我已经发布了一段代码,它可以用一个圆圈来完成,并且可以很容易地进行编辑,以处理任何闭合路径
谢谢!我一直在想怎么做。对于后人来说,你的第一个UIImage alloc中有一个小错误:应该像你的第二个一样说
imageNamed
。需要用CGImage更新imageWithCGImage:
到imageWithCGImage:scale:orientation:
UIImage中的CGImage如果是从CIImage创建的,那么它是空的,所以要小心。我已经看过了,不幸的是,我无法让它发挥作用。我把图像放在第一个参数中,比B&W图像放在第二个参数中,两者大小相同,输出与第一个图像完全相同。你的教程链接断开了。