【问题标题】:Xcode - Multiple photo filtersXcode - 多个照片过滤器
【发布时间】:2014-08-10 18:34:13
【问题描述】:

我正在创建一个包含滤镜的照片应用。过滤器可以工作,但它们会保持永久性并相互重叠。例如,我希望从图像中删除棕褐色滤镜,并在按下即时滤镜按钮时替换为即时滤镜。我如何实现这一目标?以下是该项目的一些代码:

- (IBAction)sepiaFilter:(id)sender {

    CIImage *beginImage = [CIImage imageWithData: UIImagePNGRepresentation(self.picture.image)];
    CIContext *context = [CIContext contextWithOptions:nil];
    CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues:kCIInputImageKey, beginImage, @"inputIntensity", [NSNumber numberWithFloat:0.8], nil ];
    CIImage *outputImage = [filter outputImage];
    CGImageRef cging = [context createCGImage:outputImage fromRect:[outputImage extent]];
    self.picture.image = [UIImage imageWithCGImage:cging];
    CGImageRelease(cging);     
}

- (IBAction)instantFilter:(id)sender {

    CIImage *beginImage = [CIImage imageWithData: UIImagePNGRepresentation(self.picture.image)];
    CIContext *context = [CIContext contextWithOptions:nil];
    CIFilter *filterTwo = [CIFilter filterWithName:@"CIPhotoEffectInstant" keysAndValues:kCIInputImageKey, beginImage, nil ];
    CIImage *outputImage = [filterTwo outputImage];
    CGImageRef cging = [context createCGImage:outputImage fromRect:[outputImage extent]];
    self.picture.image = [UIImage imageWithCGImage:cging];
    CGImageRelease(cging);
}

(我实际上有九个过滤器,但我只需要知道如何做到这一点)感谢您的帮助

【问题讨论】:

  • 保留您的原始图像,当用户应用过滤器然后决定使用另一个过滤器时,只需将您的原始图像放回去而不是尝试删除过滤器。

标签: ios xcode filter photo core-image


【解决方案1】:

这很简单。您正在使用self.picture.image 进行输入和输出。将原始的UIImage 单独保留用于输入,并将self.picture.image 仅用于输出,因此您的代码中唯一更改的是两个过滤器的第一行,即

CIImage *beginImage = [CIImage imageWithData: UIImagePNGRepresentation(self.originalImage)];

希望这会有所帮助。

【讨论】:

  • 我完全按照你说的做了,但是图像消失了。知道为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-12
  • 2021-10-10
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 2019-06-19
相关资源
最近更新 更多