【问题标题】:MacOS and Swift 3 with CIAffineClamp filter带有 CIAffineClamp 过滤器的 MacOS 和 Swift 3
【发布时间】:2016-10-09 07:27:02
【问题描述】:

我需要使用CIAffineClamp 来扩展图像并防止高斯模糊模糊图像边缘。我在 Swift 2 中有以下代码:

let transform = CGAffineTransformIdentity
let clampFilter = CIFilter(name: "CIAffineClamp")
clampFilter.setValue(inputImage, forKey: "inputImage")
clampFilter.setValue(NSValue(CGAffineTransform: transform), forKey: "inputTransform")

在 Swift 3 中,CGAffineTransformIdentity 被重命名为 CGAffineTransform.identity。我的代码可以编译,但是我在控制台中收到以下错误消息:

[CIAffineClamp inputTransfom] is not a valid object.

Apple 网站上的文档指出,MacOS 上的inputTransform 参数采用属性类型为CIAttributeTypeTransformNSAffineTransform 对象。但我不确定如何使用它。

任何帮助将不胜感激。

【问题讨论】:

    标签: swift macos nsimage


    【解决方案1】:

    似乎NSAffineTransform 有一个初始化器NSAffineTransform.init(transform:) 接受AffineTransform

    请试试这个:

    let transform = AffineTransform.identity
    let clampFilter = CIFilter(name: "CIAffineClamp")!
    clampFilter.setValue(inputImage, forKey: "inputImage")
    clampFilter.setValue(NSAffineTransform(transform: transform), forKey: "inputTransform")
    

    或者最后一行可以是:

    clampFilter.setValue(transform, forKey: "inputTransform")
    

    NSAffineTransform

    重要

    Foundation 框架的 Swift 覆盖提供了 AffineTransform 结构,它连接到 NSAffineTransform 班级。 AffineTransform 值类型提供与 NSAffineTransform 引用类型,两者都可以使用 在与 Objective-C API 交互的 Swift 代码中可以互换。 这种行为类似于 Swift 如何桥接标准字符串, 数字和集合类型到它们对应的基础 类。

    【讨论】:

    • 这很好用,谢谢。但是,当我通过 clampFilter.outputImage 作为 blurFilter 的源时,它失败了:blurFilter.setValue(clampFilter.outputImage, forKey: kCIInputImageKey)blurFilter.setValue(10, forKey: kCIInputRadiusKey)guardlet result = blurFilter.outputImage,let cgImage = context.createCGImage(result, from: result.extent)else {return}
    • @Pono,不确定新问题是否与此有关,并且 cmets 中包含的代码很难阅读。请开始一个新线程,更准确地描述它是如何失败的
    • 当然-这是新线程stackoverflow.com/questions/39942029
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多