如何将 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!)
}
}
我在 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!)
}
}