首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个径向渐变蒙版以在图片中创建一个孔

创建一个径向渐变蒙版以在图片中创建一个孔
EN

Stack Overflow用户
提问于 2017-02-03 04:29:55
回答 1查看 352关注 0票数 0

我想创建一个径向渐变蒙版来在图片上创建一个洞,这样你就可以看透图片了。我创建了一个带有孔的叠加图像,下面的图像是可见的,如下所示:

我能够使用CGImageMaskCreate()成功地创建此映像。但由于iOS 10.0中CGImageMaskCreate()的异常行为,我正在寻找另一种解决方案。

一种这样的解决方案是使用UIView的maskView属性创建图像蒙版。我能够使用maskView编写创建上述图像效果的代码。但是它没有给出正确的结果。

我对Core Graphics不是很在行,也许这就是为什么我找不到哪里错了。我的代码是:

代码语言:javascript
复制
CGRect rect = CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.view.bounds.size.height);
CGSize size = self.view.bounds.size;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat radius = 160.0;
CGPoint center = CGPointMake(150.0, 150.0);
CGFloat components[] = {1.0,1.0,1.0,1.0,   1.0,1.0,1.0,1.0,    1.0,1.0,1.0,1.0,     1.0,1.0,1.0,1.0,    1.0,1.0,1.0,0.5,    1.0,1.0,1.0,0.0};
CGFloat locations[] = {0.0, 0.1, 0.2, 0.8, 0.9, 1.0};

//creating bitmap context
CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrder32Big);
//creating gradient
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 6);
CGContextDrawRadialGradient(context, gradient, center, 0.1, center, radius, 0);
//get the gradient image
CGImageRef imageHole = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:imageHole];
CGGradientRelease(gradient);

//creating mask view whose alpha channels will be used for masking
UIImageView *maskImgView = [[UIImageView alloc] initWithFrame:CGRectMake(50.0, 50.0, 100.0, 100.0)];
[maskImgView setImage:img];

//This is the view on which I want to perform masking
UIImageView *mainView = [[UIImageView alloc] initWithFrame:self.view.bounds];
[mainView setImage:[UIImage imageNamed:@"insta-logo.png"]];
mainView.maskView = maskImgView;
[self.view addSubview:mainView];

这就是我得到的结果:

所使用的图像完全用红色填充。我希望生成的图像在渐变区域是透明的,这样你就可以通过它,我希望区域的其余部分是红色的,保留图像其余部分的不透明度,就像我发布的第一张图片一样。

我想使用maskView属性来创建这种效果,因为在iOS 10和更高版本中遇到了CAShapeLayerCGImageMaskCreate()的异常行为。

任何建议都会很有帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-03 05:12:02

我认为你所描述的是这样的:

如你所见,我在图像视图中打了一个径向渐变孔,让黄色背景可以看得见。

这是怎么做到的?它是一个具有清晰和黑色颜色值的CIFilter ("CIRadialGradient"),用作图像视图的mask

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42011737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档