将CIFilter应用于CALayer
所以, CIfilter现在可以在iOS 5中使用,而且我正试图将一个应用到CALayer上, 就像在Mac上一样 。 这是我的代码:
CALayer *myCircle = [CALayer layer]; myCircle.bounds = CGRectMake(0,0,30,30); myCircle.position = CGPointMake(100,100); myCircle.cornerRadius = 15; myCircle.borderColor = [UIColor whiteColor].CGColor; myCircle.borderWidth = 2; myCircle.backgroundColor = [UIColor whiteColor].CGColor; CIFilter *blurFilter = [CIFilter filterWithName:@"CIDiscBlur"]; [blurFilter setDefaults]; [blurFilter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputRadius"]; [myCircle setFilters:[NSArray arrayWithObjects:blurFilter, nil]]; [self.view.layer addSublayer:myCircle];
我的白色圆圈画得很好,但没有应用filter。 有什么想法吗?
除了CIDiskBlur
不可用(从iOS SDK 5.1开始)以及setFilters:
似乎不可用,您可以执行以下操作:
从图层的内容创buildinputCIImage:
CIImage *inputImage = [CIImage imageWithCGImage:(CGImageRef)(myCircle.contents)];`
应用你的filter,并在CGImageRef中得到结果:
CIFilter *filter = [CIFilter filterWith...];// A filter that is available in iOS or a custom one :) ... CIImage *outputImage = [filter outputImage]; CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
最后将CGImageRef设置为图层:
[myCircle setContents:(id)cgimg];
这应该工作:)
- 用于Core Image的CIGaussianGradientfilter的示例
- CVPixelBuffer到CIImage总是返回零
- 有没有办法创build一个SKSpriteNode的CGPath匹配轮廓?
- CGImageDestinationFinalize或UIImageJPEGRepresentation – 在IOS 10上保存大文件时发生崩溃
- UIGraphicsBeginImageContext必须是视网膜感知?
- 在iOS中使用CIEdgeWorkfilter
- CIGaussianBlur和iOS 6上的CIAffineClamp
- 使用GPU(可能CIFilters)将图像放在较大的canvas上,而不使用Image Context
- 将RGB图像转换为1通道图像(黑/白)