当前位置: 首页 > 面试题库 >

为什么我无法在Swift iOS应用中使用CIFilter将图像恢复为原始图像

太叔鹏云
2023-03-14
问题内容

我正在开发一个简单的应用程序。它具有带有预加载图像和按钮的图像视图。按下按钮时,应在图像视图中反转图像。

它是第一次工作,但是我希望当我再次按下该按钮时,它可以将图像转换回其原始形式。但是,第二次按下按钮时,它崩溃了。

这是来自的相关代码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。图像视图需要基于 位图 的图像,而不是基于CIImage的图像。您必须 渲染
CIImage才能将其转换为UIImage,方法是获取CIContext并告诉它创建CGImage,或者将CIImage绘制到图形上下文中。



 类似资料:
  • 问题内容: 我正在使用核心图像,并且将CIFilter棕褐色调应用于图像。我在viewDidLoad中运行了一次过滤器,然后立即调用另一个再次添加过滤器的函数。由于某些原因,当我尝试访问输出图像时,应用程序崩溃并说输出图像为nil。有人知道为什么会这样吗? 谢谢 问题答案: 您不能调用该UIImage并将其用作UIImageView的图像。UIImageView需要一个由位图(CGImage)支持

  • 问题内容: 在Java中,如何将图像的大小调整为任何类型或大小的默认大小? 问题答案: 网上有很多关于如何执行此操作的文章,类似的内容应该可以帮助您: 最终的Java图像处理(包括 许多 其他图像功能)

  • 每当我运行它时,它只会显示图像应该位于的空间下的按钮,但即使图像空间在那里,也没有图像。 这是关于intelliJ的,我尝试了很多解决方案,但都不起作用。 代码的第一部分 代码的第二部分 文件夹

  • null 那个代码有什么问题?我不明白为什么不能将ImageRi发送到ImageView。我还验证了我正在传递给setImageURI函数的Uri值是正确的。

  • 我正在尝试使用Rest服务,该服务接收带有密钥的图像。我正在Visual Studio 2017中使用RestSharp v.106.10.1。我有下面的代码,执行时返回一条带有服务器响应的消息,表示包到达时没有映像。你能帮我弄清楚我做错了什么吗?。 这是我的密码 邮递员寄信的方式是这样的。头contentType:application/x-www-form-urlencoded,表单数据中的主

  • 我使用滑翔库来显示网格视图中的图像,但是在我的图像视图中显示了注释。 E/Glide:class com。邦普泰克。滑行负载发动机GlideException:无法加载资源 我的代码在使用位图时工作正常。这是我的密码: