核心图像过滤器 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的主要内容,如果未能解决你的问题,请参考以下文章