2013-10-24 28 views
2

以下是我试图应用CIFourfoldRotatedTile筛选器上的图像的代码,但我在输出中得到一个零图像。CIFourfoldRotatedTile核心图像筛选器

CIContext *context = [CIContext contextWithOptions:nil];    // 1 
CIImage *aimage = [CIImage imageWithCGImage:[UIImage imageNamed:@"Image1.png"].CGImage]; 
CIFilter *filter = [CIFilter filterWithName:@"CIFourfoldRotatedTile"];   // 3 
[filter setValue:aimage forKey:kCIInputImageKey]; 
[filter setValue:[CIVector vectorWithCGPoint:CGPointMake(200, 200)] forKey:@"inputCenter"]; 
[filter setValue:[NSNumber numberWithFloat:2.0] forKey:@"inputAngle"]; 
[filter setValue:[NSNumber numberWithFloat:50] forKey:@"inputWidth"]; 

CIImage *result = [filter valueForKey:kCIOutputImageKey];    // 4 
CGRect extent = [result extent]; 
CGImageRef cgImage = [context createCGImage:result fromRect:extent]; 
UIImage *finalImage = [UIImage imageWithCGImage:cgImage]; 
self.imgview.image = finalImage; 

不知道我输入错误的参数。请在此引导我。 谢谢。

回答

1

我刚刚检查了你的代码,发现extent在这里是无限的,即你得到一个nil图像。我只是做了一点变化在这里,给予何种程度的帧

CGRect extent = CGRectMake(0.0, 0.0, image.size.width, image.size.height); 

OR

CGRect extent = [aimage extent]; 

,然后尝试。

+0

盘区包含输出图像大小,这意味着我的输出图像没有正确使用过滤器创建 – Leena

+0

我想我是对的。你应该使用'[aimage extent]'而不是'[result extent]' – TheTiger

+0

其实我也试过'CIGaussianBlur'和'[result extent]'不正确,即使你也可以用默认值测试它。请不要填写任何内容,只需尝试使用默认值即可。 – TheTiger