为啥我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像
Posted
技术标签:
【中文标题】为啥我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像【英文标题】:Why can't I invert my image back to original with CIFilter in my Swift iOS app为什么我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像 【发布时间】:2015-12-28 18:31:29 【问题描述】:我正在开发一个简单的应用程序。 它有一个带有预加载图像和一个按钮的图像视图。 按下按钮时,应在图像视图中反转图像。
它第一次工作,但我希望当我再次按下按钮时它会将图像反转回其原始形式。 但是,它在第二次按下按钮时崩溃。
这是来自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
构造函数神秘地发生了一些事情。有什么想法吗?
【问题讨论】:
【参考方案1】:问题出在这一行:
imageView.image = UIImage(CIImage: (filter.outputImage)!)
你不能那样做。 CIImage 不会神奇地变成 UIImage。图像视图需要基于 位图 的图像,而不是基于 CIImage 的图像。您必须渲染 CIImage 以将其转换为 UIImage,方法是获取 CIContext 并告诉它创建 CGImage,或者将 CIImage 绘制到图形上下文中。
【讨论】:
并在此处查看我的示例代码:github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 注意最后有三种情况;您想使用案例 1 技术或案例 2 技术。案例 3 技术不起作用 - 这就是您正在使用的技术。以上是关于为啥我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像的主要内容,如果未能解决你的问题,请参考以下文章