Просмотр изображения не сбрасывается в исходное после использования фильтра резкости

Невозможно получить исходное изображение после применения фильтра на изображении. Поскольку я хочу получить исходное изображение после перемещения ползунка от 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);

}

2 ответа

Решение

Просто скопируйте изображение, на которое вы добавляете фильтр, и держите его в стороне. Добавьте эффекты к скопированному изображению и покажите их в виде _affectView.

На вашем слайдере каждый раз получите ссылку на исходное изображение и эффект на это изображение, а не на изображение из вида изображения.

Создайте глобальный var как mainImage как

UIImage *mainImage;

в вашем viewDidLoad назначьте оригинальное изображение вашему основному изображению

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

У вас IBAction на каждом действии ползунка получает ссылку на исходное изображение вместо извлечения изображения из изображения.

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

Вы получаете демонстрационное изображение от _affectView, применив к нему фильтр и сохранив его в _affectView снова. В следующий раз вы получите _affectView в UIImage это будет не оригинал, а модифицированный, поэтому невозможно вернуться к оригиналу.

Просто в начале (вне этого метода) сохраните исходное изображение в demo и изменить demo каждый раз, когда вы хотите.

Другие вопросы по тегам