2017-07-18 25 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,以便我可以看到更改? –