我在 Apple 的网站上找到了这个过滤器,发现它非常适合我正在尝试做的事情,但几乎没有关于它的信息,这个问题是我能找到的唯一参考。
所以在搞砸了很长时间之后,我得到了它的工作。
基本上你在正确的道路上,但还有更多的价值需要设置,你必须创建一个足以保持最终结果UIImage
的特定值。CGRect
以下可能会实现您想要做的事情,使用 10x10 像素的星星(size
基本上是半径)。
CGFloat size = 5;
CIFilter *filter = [CIFilter filterWithName:@"CIStarShineGenerator"];
CIColor *blue = [[CIColor alloc] initWithColor:[UIColor colorBlue]];
[filter setDefaults];
[filter setValue:[NSNumber numberWithFloat:size/2] forKey:@"inputRadius"];
[filter setValue:[NSNumber numberWithFloat:1] forKey:@"inputCrossWidth"];
[filter setValue:[NSNumber numberWithFloat:2] forKey:@"inputCrossScale"];
[filter setValue:blue forKey:@"inputColor"];
[filter setValue:[CIVector vectorWithX:size Y:size] forKey:@"inputCenter"];
CIImage *outputImage = [filter valueForKey:@"outputImage"];
CIContext *context = [CIContext contextWithOptions:nil];
CGFloat UIImageOriginX = 0;
CGFloat UIImageOriginY = 0;
CGFloat UIImageSizeWidth = size * 2;
CGFloat UIImageSizeHeight = size * 2;
UIImage *image = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:CGRectMake(UIImageOriginX, UIImageOriginY, UIImageSizeWidth, UIImageSizeHeight)]];
_imageView.image = image;
上面的一些是矫枉过正的(你可以只定义CGRect
内联的尺寸),但我试图以一种清晰的方式处理各种变量。