2017-07-18 9 views
0

imageview.Aでフィルタを適用した後に元の画像を取得できません。スライダを1から0に移動した後に元の画像を取得したいのですが方向)。以下 あなたは、_affectViewからあなたのデモ画像を取得し、それにフィルタを適用し、再度_affectViewでそれを保存しているシャープネスフィルタを使用して画像ビューを元に戻しません

- (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から画像を取得したり、新しい画像を割り当てるたびにその動作が反映されます。したがって、元の画像の代わりに新しい画像を得るたびに。更新された画像ではなく元の画像に効果を追加する必要があります。あなたの参照用にansを追加しました。 – luckyShubhra

答えて

0

フィルタを追加する画像をコピーしておきます。コピーしたイメージにエフェクトを追加し、_affectViewイメージビューに表示します。

いつでも、元の画像とエフェクトを画像ビューからの画像ではなくその画像への参照を取得します。

すべてのスライダー操作であなたIBActionでは、あなたのメイン画像

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

にorigialイメージを割り当てる画像を取り込むのではなく、元の画像のrefernceを取得し、あなたのviewDidLoadで

UIImage *mainImage; 

としてmainImageとしてグローバルなVARを作成します。イメージビューから。

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

シャープネス効果を適用するためのコードです。あなたがUIImageに_affectViewを次に検索するとき、元のものではなく変更されたものになるので、元のものに戻ることは不可能です。

開始時(この方法以外)は、元画像をdemoに保存し、必要なときにいつもdemoを変更します。

+0

出力イメージをフィルタからイメージビューに割り当てることができない場合、どのようにイメージビューにフィルタの効果を表示できますか? –

+0

demoという名前のグローバル変数を使用し、それにフィルタを適用し、フィルタリングした画像を画像ビューに割り当てます。フィルターを適用すると元の画像に戻ることはないため、フィルターを適用するたびにデモを無効にする必要はありません。 –

+0

このデモ画像を_affectViewに割り当てる場所はどこですか?変更を確認できますか? –

関連する問題