0

在imageview上应用过滤器后无法获得原始图像。因为我想在将滑块从1移动到0(最大值到最小值,我的意思是反向)后获得原始图像。下面是应用锐度效果的代码

- (IBAction)actionSharp:(UISlider *)sender {


    demoImage = _affectView.image;
    CIImage* image = [CIImage imageWithCGImage:demoImage.CGImage];
    CIContext *context = [CIContext contextWithOptions:nil];
    NSNumber *testNSNumber = [NSNumber numberWithFloat:_sharpActionWithSlider.value];
    NSLog(@"ffghhn %f",_sharpActionWithSlider.value);
    CIFilter *gaussianBlurFilter = [CIFilter filterWithName:@"CISharpenLuminance" keysAndValues: @"inputImage", image, nil];

    [gaussianBlurFilter setDefaults];
    [gaussianBlurFilter setValue:testNSNumber forKey:kCIInputSharpnessKey];
    [gaussianBlurFilter setDefaults];
    CIImage *result2 = [gaussianBlurFilter valueForKey:kCIOutputImageKey];
    CGImageRef cgImage = [context createCGImage:result2 fromRect:[result2 extent]];
    UIImage *sharp= [UIImage imageWithCGImage:cgImage];
    UIImage *p = sharp;
    self.affectView.image= p;
    self.affectView.alpha = sender.value;
   CGImageRelease(cgImage);

}
4

2 回答 2

0

您正在从 获取演示图像_affectView,对其应用过滤器,然后_affectView再次将其保存。下次您检索_affectView到 UIImage 时,它​​将不是原始图像,而是修改后的图像,因此不可能恢复到原始图像。

刚开始(在此方法之外)保存原始图像并在每次需要时进行demo修改。demo

于 2017-07-18T07:18:27.503 回答
0

只需复制要添加过滤器的图像并将其放在一边。为复制的图像添加效果并将它们显示在您的 _affectView 图像视图中。

每次在您的滑块操作上,从您的原始图像和效果到该图像而不是图像视图中的图像获取参考。

将全局变量创建为 mainImage 为

UIImage *mainImage;

在您的 viewDidLoad 中,将原始图像分配给您的主图像

mainImage = [UIImage imagenamed:"yourMainImage"]; // assign from source local or url

在每个滑块动作上的 IBAction 中,获取原始图像的引用,而不是从 imageview 获取图像。

- (IBAction)actionSharp:(UISlider *)sender {
UIImage *demoImage = mainImage;
CIImage* image = [CIImage imageWithCGImage:demoImage.CGImage];
CIContext *context = [CIContext contextWithOptions:nil];
NSNumber *testNSNumber = [NSNumber numberWithFloat:_sharpActionWithSlider.value];
NSLog(@"ffghhn %f",_sharpActionWithSlider.value);
CIFilter *gaussianBlurFilter = [CIFilter filterWithName:@"CISharpenLuminance" keysAndValues: @"inputImage", image, nil];

[gaussianBlurFilter setDefaults];
[gaussianBlurFilter setValue:testNSNumber forKey:kCIInputSharpnessKey];
[gaussianBlurFilter setDefaults];
CIImage *result2 = [gaussianBlurFilter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result2 fromRect:[result2 extent]];
UIImage *sharp= [UIImage imageWithCGImage:cgImage];
UIImage *p = sharp;
self.affectView.image= p;
self.affectView.alpha = sender.value;
CGImageRelease(cgImage);
}
于 2017-07-18T11:38:04.757 回答