2

我正在尝试新的 CIFilter CIStarShineGenerator

但是输出图像只是空白,我如何检查它是否正常生成?

CIColor *blue = [CIColor colorWithString:@"0.1 0.5 0.8 1.0"];
CIFilter *filter = [CIFilter filterWithName:@"CIStarShineGenerator" keysAndValues:@"inputColor", blue, nil];
CIImage *outputImage = [filter outputImage];
UIImage *image = [UIImage imageWithCIImage:outputImage];

_imageView.image = image;

imageView 是在屏幕上显示的图像视图。

4

1 回答 1

1

我在 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内联的尺寸),但我试图以一种清晰的方式处理各种变量。

于 2013-10-24T14:49:10.737 回答