为什么我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像
Why can't I invert my image back to original with CIFilter in my Swift iOS app
我正在开发一个简单的应用程序。
它有一个带有预加载图像和按钮的图像视图。
当按下按钮时,图像视图中的图像应该反转。
它第一次工作,但我希望它能在我再次按下按钮时将图像反转回原来的形式。
然而,它在第二次按下按钮时崩溃了。
这里是来自ViewController.swift
的相关代码:
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var invertButton: UIButton!
@IBAction func invertButtonPressed(sender: UIButton) {
let beginImage = CIImage(image: imageView.image!)
let filter = CIFilter(name: "CIColorInvert")!
filter.setValue(beginImage, forKey: kCIInputImageKey)
imageView.image = UIImage(CIImage: (filter.outputImage)!)
}
基本上,beginImage
第二次变成了 nil
,我不知道为什么。我尝试通过将那些密集的行拆分为尽可能多的 let
分配来进行调试,但是 CIImage
构造函数神秘地发生了一些事情。有什么想法吗?
问题出在这一行:
imageView.image = UIImage(CIImage: (filter.outputImage)!)
你不能那样做。 CIImage 不会神奇地变成 UIImage。图像视图需要基于 bitmap 的图像,而不是基于 CIImage 的图像。您必须 渲染 CIImage 以将其转换为 UIImage,方法是获取 CIContext 并告诉它创建 CGImage 或将 CIImage 绘制到图形上下文中。
我正在开发一个简单的应用程序。 它有一个带有预加载图像和按钮的图像视图。 当按下按钮时,图像视图中的图像应该反转。
它第一次工作,但我希望它能在我再次按下按钮时将图像反转回原来的形式。 然而,它在第二次按下按钮时崩溃了。
这里是来自ViewController.swift
的相关代码:
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var invertButton: UIButton!
@IBAction func invertButtonPressed(sender: UIButton) {
let beginImage = CIImage(image: imageView.image!)
let filter = CIFilter(name: "CIColorInvert")!
filter.setValue(beginImage, forKey: kCIInputImageKey)
imageView.image = UIImage(CIImage: (filter.outputImage)!)
}
基本上,beginImage
第二次变成了 nil
,我不知道为什么。我尝试通过将那些密集的行拆分为尽可能多的 let
分配来进行调试,但是 CIImage
构造函数神秘地发生了一些事情。有什么想法吗?
问题出在这一行:
imageView.image = UIImage(CIImage: (filter.outputImage)!)
你不能那样做。 CIImage 不会神奇地变成 UIImage。图像视图需要基于 bitmap 的图像,而不是基于 CIImage 的图像。您必须 渲染 CIImage 以将其转换为 UIImage,方法是获取 CIContext 并告诉它创建 CGImage 或将 CIImage 绘制到图形上下文中。