所以我有一个使用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;
}发布于 2012-06-17 09:37:29
您可以将UISlider的continuous属性设置为NO。因此,只有当用户releaseS手指时才会调用您的changeSlider。这是苹果的doc
发布于 2013-01-30 05:36:06
你在这里的问题是你一直在重新声明上下文。将上下文作为属性,并在初始化器中初始化它一次,然后反复使用它,就会看到巨大的性能提升。
发布于 2012-06-17 09:48:55
我猜,与其改变你想要的可怕的行为,在滑动的同时频繁更新是好的!对于用户体验来说,这是最佳选择。因此,不要改变这种行为,而是要对算法进行改进,以实现更大的优化。检查这个之前问过的问题,它有一些很好的提示。
How to implement fast image filters on iOS platform
我的建议是,不断更新滑块属性,但尝试编写一些代码,当滑块命中一个整数小数(有趣的术语,可能也是错误的)时进行更新。我的意思是,当滑块经过10.000,20.000,30.000时检测到。只有这样才能更新图像,而不是为每个点更新。希望这是有意义的。
编辑:
让你的,
以iVar格式输入图像和过滤变量。检查它们是否已经被分配,然后重用它,而不是每次都创建。
https://stackoverflow.com/questions/11067998
复制相似问题