如何将 UIImage 的实例存储在 iOS 的 var 中?

How to store an instance of UIImage in a var in iOS?

我在 ViewControlller.swift 中有一个过滤功能,可以过滤 photoImageView 的图像,它也存储在 ViewControlller.swift 中。问题是滤色器应用于先前过滤图像的结果而不是原始图像。如何将 photoImageView 存储在 originalImage var 中以将过滤器应用于它?

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    //MARK: Properties
    @IBOutlet weak var photoImageView: UIImageView!

    @IBAction func slideFilter(_ sender: UISlider) {

        var hueFilter = Double(sender.value)
        hueFilter = hueFilter.rounded(toPlaces: 2)

        //create image to filter
        let inputImage = CIImage(image: photoImageView.image!)

        //Create a random color to apply
        let randomColor = [kCIInputAngleKey: hueFilter]

        //Apply filter to image
        let filteredImage = inputImage!.applyingFilter("CIHueAdjust", parameters: randomColor)     

        let renderImage = context.createCGImage(filteredImage, from: filteredImage.extent)

        // Reflect the change back in the interface
        photoImageView.image = UIImage(cgImage: renderImage!)
    }
}

当我尝试在 ViewController 中存储变量 photoImageView 的实例时,出现此错误 Cannot use instance member 'photoImageView' within property initializer; property initializers run before 'self' is available

您不能在 ViewController 中存储变量 photoImageView 的实例。但是,您可以在 viewDidLoad().

这样的方法中存储变量 photoImageView 的实例

只需在行后使用断点:

let inputImage = CIImage(image: photoImageView.image!)

看看inputImage的值是多少。这是您要操作的图像吗?

因为如果inputImage不正确,最后的结果也会不正确。

希望对您有所帮助。

我明白了!

您只需在 ViewController 中的任何方法之外创建 inputImage 变量。这样任何方法都可以调用它。

viewDidLoad()(以及您要更改图像的任何地方)中设置 inputImage 的值。这样滤镜函数就可以访问图像了。

最终结果:

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    //MARK: Properties
    @IBOutlet weak var photoImageView: UIImageView!

    var inputImage:CIImage? 


    override func viewDidLoad() {
    super.viewDidLoad()
        inputImage = CIImage(image: photoImageView.image!)


    }


    @IBAction func slideFilter(_ sender: UISlider) {

        var hueFilter = Double(sender.value)
        hueFilter = hueFilter.rounded(toPlaces: 2)

        //Create a random color to apply
        let randomColor = [kCIInputAngleKey: hueFilter]

    //Apply filter to image
    let filteredImage = inputImage!.applyingFilter("CIHueAdjust", parameters: randomColor)     

    let renderImage = context.createCGImage(filteredImage, from: filteredImage.extent)

        // Reflect the change back in the interface
        photoImageView.image = UIImage(cgImage: renderImage!)
    }
}