核心图像过滤器 iOS UISlider

Posted

技术标签:

【中文标题】核心图像过滤器 iOS UISlider【英文标题】:Core Image Filter iOS UISlider 【发布时间】:2014-04-09 17:52:06 【问题描述】:

我正在尝试对从照片库加载到 UI 视图中的图像实施棕褐色过滤器。

我有一个 UI 滑块...范围 -1 到 1。并应用棕褐色效果。

我遇到的问题是,总体效果正在得到总结。就像...如果我将滑块设置为 1,然后将其移回 0。它不会将图像恢复到原始形式。我将它移回 1 .. 总棕褐色被应用了 2 次。

- (IBAction)slidermove:(id)sender 

    currentValue=_sliderValue.value;

    if (currentButton==1)
    
        //1
        CIImage *beginImage = [CIImage imageWithData: UIImagePNGRepresentation(self.imageView.image)];

        //2
        CIContext *context = [CIContext contextWithOptions:nil];

        //3
        CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
                                      keysAndValues: kCIInputImageKey, beginImage,
                            @"inputIntensity", [NSNumber numberWithFloat:currentValue], nil];

        //4
        CIImage *outputImage = [filter outputImage];

        CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];

        //5
        self.imageView.image = [UIImage imageWithCGImage:cgimg];

        //6
        CGImageRelease(cgimg);
    






- (IBAction)applyeffect:(id)sender

    currentButton=1;



【问题讨论】:

【参考方案1】:

出现问题是因为您没有保存原始图像。每次滑块更改时,您都会更改图像,因此效果会复合。你应该这样做:

在你的@interface:

@property(strong, nonatomic)UIImage *originalImage;

在你的@implementation:

-(void)viewDidLoad
    [super viewDidLoad];
    self.imageView.image = self.originalImage;

然后当你做效果的时候,把它应用到originalImage属性上,并在self.imageView中显示结果。

【讨论】:

更好的是,我建议不要在每次移动滑块时重新创建过滤器、上下文和初始 CIImage。那将是非常昂贵的。相反,创建上下文、初始 CIImage 和过滤一次,然后简单地使用滑块调整值。更好的是,不要渲染到 UIImage 和 UIImageView,而是将结果渲染到 OpenGL ES 上下文以进行实时更新,并且只在需要时拉取完整的 UIImage。 68cherries,当我在beginImage中使用原始图像时,只要我移动滑块,图像就会消失。 CIImage *beginImage = [CIImage imageWithData: UIImagePNGRepresentation(self.originalImage)]; 你应该验证self.originalImage是在你的代码中设置的。

以上是关于核心图像过滤器 iOS UISlider的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在创建核心图像过滤器循环时保留原始图像

UIslider 按钮不适用于复选框过滤器

核心图像过滤器崩溃问题

可以应用哪些核心图像过滤器来改善文本文档的图像?

使用 Swift 为核心图像过滤器添加价值

核心图像:使用 CICrop 后,应用合成过滤器不对齐