首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >目标C: CIFilter返回零图像

目标C: CIFilter返回零图像
EN

Stack Overflow用户
提问于 2016-08-18 22:07:41
回答 2查看 850关注 0票数 0

我正在编写一个函数,它将对图像应用一个过滤器并返回新的图像。我编写了以下代码:

代码语言:javascript
运行
复制
+ (UIImage*)applyFilter:(UIImage*) photo {
    CIImage *image = [[CIImage alloc] initWithCGImage:photo.CGImage];
    CIFilter *filter = [CIFilter filterWithName:@"CIphotoEffectTransfer"
                                  keysAndValues: kCIInputImageKey, image,
                        @"inputIntensity", @0.8, nil];
    CIImage *outputImage = [filter outputImage];

    UIImage* newPhoto = [self imageFromCIImage:outputImage];
    return newPhoto;
}

我遇到的问题是,函数返回的是一个零照片,而不是一个应用过滤器的照片。有趣的是,如果我将过滤器名更改为@"CIVignetteEffect“,它就会工作。我不明白为什么一个过滤器起作用,而另一个过滤器不行。我从以下链接中找到了这两个过滤器:参考文件/doc/filter/ci/CIPhotoEffectTransfer

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 22:10:04

我相信过滤器的正确名称是CIPhotoEffectTransfer,而不是CIphotoeffectTransfer。

试试这段代码.我以前用过它来过滤照片,所以我知道它是有效的:

代码语言:javascript
运行
复制
+ (UIImage*)applyFilter:(UIImage*) photo {
UIImageOrientation orientation = photo.imageOrientation;
CIImage* image = [CIImage imageWithCGImage:photo.CGImage];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectTransfer"];
[filter setValue:image forKey:kCIInputImageKey];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newPhoto = [UIImage imageWithCGImage:cgimg scale:1.0 orientation:orientation];
CGImageRelease(cgimg);
context = nil;
return newPhoto;

}

票数 3
EN

Stack Overflow用户

发布于 2017-08-30 07:28:01

试试这个,

我们已经实现了CIFilter效应,

代码语言:javascript
运行
复制
       //CIVignette Effect 

        CIContext *imageContext = [CIContext contextWithOptions:nil];
        CIImage *image = [[CIImage alloc] initWithImage:inputimage];

        CIFilter *vignette = [CIFilter filterWithName:@"CIVignette"];
        [vignette setDefaults];
        [vignette setValue: image forKey: @"inputImage"];
        [vignette setValue: [NSNumber numberWithFloat: 1.0] forKey: @"inputIntensity"];
        [vignette setValue: [NSNumber numberWithFloat: 10.00 ] forKey: @"inputRadius"];
         CIImage *result = [vignette valueForKey: @"outputImage"];
        CGImageRef cgImageRef = [imageContext createCGImage:result fromRect:[result extent]];
        UIImage *targetImage = [UIImage imageWithCGImage:cgImageRef];

有关多重效果的详细实现,可以参考此GitHub项目文件ImageFilter

希望这个答案对某些人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39028234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档