ios - 如何将 UIImage 的实例存储在 iOS 的 var 中?
问题描述
我有一个过滤器功能,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!)
}
}
当我尝试photoImageView
在 ViewController 中存储变量的实例时,出现此错误Cannot use instance member 'photoImageView' within property initializer; property initializers run before 'self' is available
解决方案
我知道了!
您只需inputImage
在ViewController
. 这样任何方法都可以调用它。
设置inputImage
in viewDidLoad()
(以及您将要更改图像的任何位置)的值。所以过滤功能可以访问图像。
最终结果:
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!)
}
}
推荐阅读
- c++ - C++ 多线程使用 std::locale 分隔数千 - 奇怪的结果
- reactjs - Formik Yup - 检查字段是否有重复值
- java - 我应该如何在 Java 游戏中进行内存管理?
- angular - 如何在 Angular 中覆盖组件的 CSS 样式?
- ubuntu - 使用 Makefile 调试 CLion [UNIX]
- python - Pandas:根据组聚合添加新行
- javascript - 如何仅使用 JavaScript 创建多个登录和注册表单并存储到本地服务器
- ios - 使用出队 UICollectionViewCell 和 TableViewCell 的问题
- python - Pygame Zero:创建多个关卡
- acumatica - PXFormula 和 SumCalc 计算不正确(字段值加倍)