2017-07-18 77 views
0

在imageview上应用滤镜后无法获得原始图像。我想在将滑块从1移动到0(最大值到最小值,我的意思是反向方向)。 下面是应用锐度效果在使用清晰度滤镜后Imageview未复位为原始图像

- (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); 

} 
+0

每次您从self.affectView.image获取图像并为其分配新图像时,因此,每次你得到新的图像,而不是原始图像。您需要为原始图片添加效果,而不是更新后的图片。我为您的引荐添加了回复。 – luckyShubhra

回答

0

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

在您的滑块操作中,每次从原始图像获取参考,并影响该图像而不是图像视图中的图像。

创建全局变量作为mainImage作为

UIImage *mainImage; 
在您的viewDidLoad

origial图像分配给您的主图像

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

在你IBAction为每个滑块行动得到原始图像的refernce而不是获取图像来自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); 
} 
0

您从_affectView让您的演示图像,应用一个过滤器,然后再重新将其保存在_affectView代码。下次您将_affectView检索到UIImage中时,它不会是原始版本,而是修改后的版本,因此无法回到原始版本。

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

+0

我如何显示过滤器对imageview的影响,如果我不将过滤器的输出图像分配给imageview? –

+0

您使用名为demo的全局变量,将过滤器应用于该变量并将过滤后的图像分配给imageview。每次你想要应用过滤器时,你都不必重写'demo',因为一旦你应用了过滤器,就不会回到原始图像。 –

+0

在哪里将此demoimage分配给_affectView,以便我可以看到更改? –