微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决 macOS 应用上 CIFilter 导致的错误

如何解决如何解决 macOS 应用上 CIFilter 导致的错误

我是 macOS 应用程序的新手,但 A 已经完成了一个 iOS 应用程序。 我会尝试转换灰度图像

编译没问题,但我在“filter.outputimage”有这个运行错误

错误是:线程 1:“-[NSImage imageByColorMatchingWorkingSpacetoColorSpace:]:无法识别的选择器发送到实例 0x60000201e4e0”

怎么了?

import Cocoa
import AppKit

class ViewController: NSViewController {

@IBOutlet weak var Load: NSButton!
@IBOutlet weak var ImageSource: NSImageView!
@IBOutlet weak var ImageNG: NSImageView!


func grayscale(image: NSImage) -> NSImage? {
    
    let width = image.size.width
    let height = image.size.height
    let cgsize = CGSize (width: width,height: height)
    
    let context = CIContext(options: nil)
    if let filter = CIFilter(name: "CIPhotoEffectMono") { //CIPhotoEffectNoir  CIPhotoEffectMono  CIPhotoEffectTonal CIPixellate
        filter.setValue(image,forKey: kCIInputimageKey)
        
        if let output = filter.outputimage {
            if let cgImage = context.createCGImage(output,from: output.extent) {
                return NSImage(cgImage : cgImage,size: cgsize)
            }
        }
    }
    return nil
}

@IBAction func LoadButtonClicked(_ sender: Any) {
    
    ImageSource.image = NSImage(named:"IMAGE")
    let imageNG = grayscale(image:  ImageSource.image! )
    ImageNG.image = imageNG
    
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override var representedobject: Any? {
    didSet {
    }
}

}

解决方法

kCIInputImageKey 的值是一个 CIImage 对象,而不是一个 NSImagehttps://developer.apple.com/programs/enroll/

也许是这样的:

if let cgImage = image.cgImage(forProposedRect: nil,context: nil,hints: nil) {
    filter.setValue(CIImage(cgImage: cgImage),forKey: kCIInputImageKey)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。