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

如何在iOS中的var中存储UIImage实例?,ios,swift,uiimage,Ios,Swift,Uiimage,我在viewcontroller.swift中有一个过滤函数,用于过滤photoImageView的图像,该图像也存储在viewcontroller.swift中。问题是,颜色过滤器应用于先前过滤图像的结果,而不是原始图像。如何将photoImageView存储在originalImagevar中,从而对其应用过滤器 class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationContr

我在
viewcontroller.swift
中有一个过滤函数,用于过滤
photoImageView
的图像,该图像也存储在
viewcontroller.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
的实例时,我遇到了此错误
无法在属性初始值设定项中使用实例成员“photoImageView”;属性初始值设定项在“self”可用之前运行

您不能在
视图控制器中存储变量
photoImageView
的实例。但是,您可以在类似
viewDidLoad()
的方法中存储变量
photoImageView
的实例

只需在行后使用断点:

let inputImage = CIImage(image: photoImageView.image!)
查看
inputImage
的值。这是你想要操作的图像吗

因为如果
inputImage
不正确,最终结果也将不正确


我希望它有帮助。

您不能将变量
photoImageView
的实例存储在
ViewController
中。但是,您可以在类似
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!)
    }
}
我明白了

只需在
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!)
    }
}

var img:UIImage?
当我尝试在ViewController中存储变量的实例
photoImageView
时,我遇到此错误
无法在属性初始值设定项中使用实例成员“photoImageView”;属性初始值设定项在“self”可用之前运行
“当我尝试存储变量photoImageView的实例时”是什么阻止您使用
photoImageView
变量?为什么需要另一个呢?因为在过滤函数的最后一行
photoImageView.image=UIImage(cgImage:renderImage!)
<代码>photoImageView
更改为过滤版本。因此,如果我使用
photoImageView
作为过滤器的输入图像,过滤器将更改图像的过滤版本,而不是原始版本。当我尝试在ViewController中存储变量
photoImageView
的实例时,我会查找“全局变量”和“局部变量”
var img:UIImage?
错误
无法在属性初始值设定项中使用实例成员“photoImageView”;属性初始值设定项在“self”可用之前运行
“当我尝试存储变量photoImageView的实例时”是什么阻止您使用
photoImageView
变量?为什么需要另一个呢?因为在过滤函数的最后一行
photoImageView.image=UIImage(cgImage:renderImage!)
<代码>photoImageView更改为过滤版本。因此,如果我使用
photoImageView
作为过滤器的输入图像,过滤器将更改图像的过滤版本,而不是原始版本。我将查找“全局变量”和“局部变量”,因此看起来像这样的
func storeImage()->CIImage{let inputImage=CIImage(image:photoImageView.image!)返回inputImage}
如果是这样的话。那不是每次调用函数时都会重新分配
inputImage
吗?那看起来像这样
func storeImage()->CIImage{let inputImage=CIImage(image:photoImageView.image!)返回inputImage}吗
如果是这样的话。那不是每次调用函数时都重新分配
inputImage