CIFilter与UISlider(CIFilter with UISlider)

2019-09-18 04:10发布

所以我有一个改变使用CIFilter色相一个UISlider。 它的疯狂慢,因为我影响了基本图像,而uislider正在使用中。

任何一个有关于如何更有效地做到这一点建议吗?

 // UI SLIDER
-(IBAction)changeSlider:(id)sender {

    [self doHueAdjustFilterWithBaseImage:currentSticker.image 
                            hueAdjust:[(UISlider *)sender value]];

}
//Change HUE
-(void)doHueAdjustFilterWithBaseImage:(UIImage*)baseImage hueAdjust:(CGFloat)hueAdjust {

    CIImage *inputImage = [[CIImage alloc] initWithImage:baseImage];
    CIFilter * controlsFilter = [CIFilter filterWithName:@"CIHueAdjust"];

    [controlsFilter setValue:inputImage forKey:kCIInputImageKey];
    [controlsFilter setValue:[NSNumber numberWithFloat:hueAdjust] forKey:@"inputAngle"];

    //NSLog(@"%@",controlsFilter.attributes);

    CIImage *displayImage = controlsFilter.outputImage;
    CIContext *context = [CIContext contextWithOptions:nil];

    if (displayImage == nil){

        NSLog(@"Display NADA");

    } else {

        NSLog(@"RETURN Image");
        currentSticker.image =  [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]];

    }

    displayImage = nil;
    inputImage = nil;
    controlsFilter = nil;

}

Answer 1:

您可以设置UISlider的连续属性为NO。 这样你的changeSlider只有被调用时,用户松开手指。 这里是苹果公司的文档 ?



Answer 2:

在这里你的问题是,你继续重新声明的上下文。 把上下文属性,并在你的初始化一次初始化,然后反复使用它,看到一个巨大的性能提升。



Answer 3:

我猜,而改变你想要的真棒行为,而滑动频繁更新好! 它是最适合的用户体验。 所以,不要改变这种行为,但在你的算法而工作,以实现更好的优化。 勾选此之前问的问题,其中有一些好的建议。

如何实现对iOS平台的快速图像过滤器


我去会,不断更新滑块财产,但尝试代码的东西,这使得更新时,滑块击中数是一个整体小数(滑稽的术语,它可能是错的太)我的意思是当滑块通过直通10.000,20.000检测, 30.000。 只有这样,更新图像,而更新的每一个点。 希望这是有道理的。

编辑:

做你的,

输入法师和过滤器变量伊娃。 并检查它们已经被分配后,再使用它,而然后创建每一次。



文章来源: CIFilter with UISlider
标签: ios hue