核心图像过滤器的输出图像第二次在 UIImage 上运行时为零

Posted

技术标签:

【中文标题】核心图像过滤器的输出图像第二次在 UIImage 上运行时为零【英文标题】:Core image filter's output image is nil second time it is run on a UIImage 【发布时间】:2015-02-06 20:06:48 【问题描述】:

我正在使用 Core Image 将棕褐色滤镜应用于图像。我将过滤器设置为点击手势。第一次按下点击手势时,过滤器将应用于图像视图的图像,并将输出添加回图像视图。当我第二次按下屏幕时,应用程序崩溃并说输出为零。有谁知道为什么会这样?代码和错误信息图片如下。

    import UIKit

class ViewController: UIViewController, UIGestureRecognizerDelegate 

    @IBOutlet weak var imageview: UIImageView!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        var gestureRecognizer = UITapGestureRecognizer(target: self, action: "tap")
        gestureRecognizer.delegate = self
        self.view.addGestureRecognizer(gestureRecognizer)

    

    func tap()

        // 2
        let beginImage = CIImage(image: imageview.image)

        // 3
        let filter = CIFilter(name: "CISepiaTone")

        filter.setValue(beginImage, forKey: kCIInputImageKey)
        imageview.image = UIImage(CIImage: filter.outputImage)


    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


【问题讨论】:

【参考方案1】:

我之前也遇到过同样的问题。你的代码没有问题。我认为你使用的图片有问题。这个没有CIContext的基本制作过程无法处理带有alpha通道的图片。我认为您可能正在使用带有 alpha 通道的图片,例如图标或其他东西。用照片更改您的照片,然后再试一次。

【讨论】:

以上是关于核心图像过滤器的输出图像第二次在 UIImage 上运行时为零的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI ImagePicker 保存(图像-> UIImage--> 数据)到核心数据

每个对象的核心数据和唯一 UIImage

在 UIImage 上突出显示(覆盖)特定区域

UIImage 混合模式问题

使用普通的 CALayer 显示图像或 UIImage

如何在 UIImage 数组中设置第二张或中间的图像? (斯威夫特 3)