1

以下方法尝试将高斯模糊应用于图像。但是它什么也没做。你能告诉我哪里出了问题,如果你也知道错误的原因,那也会有帮助。我正在尝试了解 CALayers 和quartzcore。

谢谢

-(void)updateFavoriteRecipeImage{

    [self.favoriteRecipeImage setImageWithURL:[NSURL URLWithString:self.profileVCModel.favoriteRecipeImageUrl] placeholderImage:[UIImage imageNamed:@"miNoImage"]];

    //Set content mode
    [self.favoriteRecipeImage setContentMode:UIViewContentModeScaleAspectFill];
    self.favoriteRecipeImage.layer.masksToBounds = YES;

    //Blur the image
    CALayer *blurLayer = [CALayer layer];
    CIFilter *blur = [CIFilter filterWithName:@"CIGaussianBlur"];
    [blur setDefaults];
    blurLayer.backgroundFilters = [NSArray arrayWithObject:blur];
    [self.favoriteRecipeImage.layer addSublayer:blurLayer];


    [self.favoriteRecipeImage setAlpha:0];

    //Show image using fade
    [UIView animateWithDuration:.3 animations:^{

        //Load alpha
        [self.favoriteRecipeImage setAlpha:1];
        [self.favoriteRecipeImageMask setFrame:self.favoriteRecipeImage.frame];
    }];
}
4

2 回答 2

5

物业的文件是这样backgroundFilters说的:

特别注意事项

iOS 中的图层不支持此属性。

从 iOS 6.1 开始,没有用于在 iOS 上将实时过滤器应用于图层的公共 API。您可以编写代码将底层图层绘制到 a 上CGImage,然后对该图像应用滤镜并将其设置为图层的背景,但这样做有点复杂并且不是“实时”的(如果底层图层不会自动更新改变)。

于 2013-06-20T21:09:00.147 回答
1

试试下面的东西:

CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"test.png"]] ;

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"] ;

[blurFilter setDefaults] ;

[blurFilter setValue:inputImage forKey:@"inputImage"] ;

[blurFilter setValue: [NSNumber numberWithFloat:10.0f] forKey:@"inputRadius"];

CIImage *outputImage = [blurFilter valueForKey: @"outputImage"];

CIContext *context = [CIContext contextWithOptions:nil];

self.bluredImageView.image = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
于 2013-07-21T17:06:06.160 回答