2016-08-28 67 views
1

现在已经在swift上工作了一段时间,并且在处理此Core Image Framework时遇到了问题。我能够在图像上成功创建CIFilter,但我不确定如何删除它。图像被放置在类似于snapchat的相机屏幕的UIView上,然后有一个imageview,它是图像被预览的uiview的子视图。顺便说一下,使用最新的Xcode和iOS版本。Swift无法从UIImage中删除CIFIlter

这里是当应用黑白过滤器的代码:

@IBAction func BW_Flt_Bt_Tapped(sender: UIButton) { 
    let beginImage = CIImage(image: imagePreview.image!) 
    let ciContext = CIContext(options: nil) 
    let filter = CIFilter(name: "CIPhotoEffectNoir") 
    var imgOrientation = imagePreview.image!.imageOrientation 
    var imgScale = imagePreview.image?.scale 
    filter!.setDefaults() 
    filter!.setValue(beginImage, forKey: kCIInputImageKey) 
    let filteredImageData = filter!.valueForKey(kCIOutputImageKey) as! CIImage 
    let filteredImageRef = ciContext.createCGImage(filteredImageData, fromRect: filteredImageData.extent) 
    imagePreview.image = UIImage(CGImage: filteredImageRef, scale: 1.0, orientation: UIImageOrientation.Right) 
    self.orgImgBt.hidden = false 
    self.orgImgL.hidden = false 
    BWFlt.hidden = true 
    BWLbl.hidden = true 





} 

-imagePreview是的UIView的子视图

接下来是我如何将图像改回

代码
@IBAction func orgImgPressed(sender: UIButton) { 
    self.imagePreview.image = self.selctedImage 
    orgImgBt.hidden = true 
    orgImgL.hidden = true 
    `enter code here` BWFlt.hidden = false 
    `enter code here`BWLbl.hidden = false 


      print("button was pressed") 
     } 

如果有人有任何建议,我会非常感激,谢谢!

+0

什么是self.selectedImage? – beyowulf

回答

0

您可能应该保留对原始图像的引用,而不仅仅是将滤镜应用于当前在UIImageView中显示的任何图像,因为您应用滤镜,然后将输出图像设置为UIImageView,并且没有办法检索输入图像。另一种选择是保留对CIFilter的引用。为此,您应该声明一个属性:

let noirFilter = CIFilter(name: "CIPhotoEffectNoir")! 

然后,您可以在应用过滤器中使用此过滤器并还原为原始方法。

@IBAction func BW_Flt_Bt_Tapped(sender: UIButton) { 

    let beginImage = CIImage(image: imagePreview.image!) 
    noirFilter.setValue(beginImage, forKey: kCIInputImageKey) 
    let filteredImage = noirFilter.valueForKey(kCIOutputImageKey) as! CIImage 
    imagePreview.image = UIImage(CIImage: filteredImage) 

    self.orgImgBt.hidden = false 
    self.orgImgL.hidden = false 
    BWFlt.hidden = true 
    BWLbl.hidden = true 
} 

@IBAction func orgImgPressed(sender: UIButton) { 

    let inputImage = noirFilter.valueForKey(kCIInputImageKey) as! CIImage 
    imagePreview.image = UIImage(CIImage: inputImage) 

    orgImgBt.hidden = true 
    orgImgL.hidden = true 
    `enter code here` BWFlt.hidden = false 
    `enter code here`BWLbl.hidden = false 


    print("button was pressed") 
} 

或者更理想:

@IBAction func orgImgPressed(sender: UIButton) { 

    imagePreview.image = self.currentInputImage 

    orgImgBt.hidden = true 
    orgImgL.hidden = true 
    `enter code here` BWFlt.hidden = false 
    `enter code here`BWLbl.hidden = false 


    print("button was pressed") 
} 

哪里currentInputImage是对UIImage引用您要应用过滤器。

+0

这确实给了我想要的图像,但是它被旋转并且比原来的尺寸要小,对于如何纠正这个问题有什么建议? – NightHawk95

+0

你尝试过使用'UIImage(CIImage :, scale :, orientation:)'而不是'UIImage(CIImage:)'吗? – beyowulf