使用vDSP API进行Swift编译的转换参数

Lau*_*ent 5 ios accelerate-framework swift

我正在尝试使用Swift中的vDSP API来使用Accelerate框架.显然我做错了,虽然编译器给了我各种警告

var srcAsFloat:CConstPointer<CFloat> = CFloat[](count: Int(width*height), repeatedValue: 0)
var dstAsFloat = CFloat[](count: Int(width*height), repeatedValue: 0)

if shouldClip {
    var min:CFloat = 0.0
    var max:CFloat = 255.0
    var l:vDSP_Stride = Int(width*height)
    vDSP_vclip(CConstPointer<CFloat>(&dstAsFloat), vDSP_Stride(1), CConstPointer<CFloat>(&min), CConstPointer<CFloat>(&max), CMutablePointer<CFloat>(&dstAsFloat), vDSP_Stride(1), l)
}
Run Code Online (Sandbox Code Playgroud)

错误:

error: could not find an overload for 'init' that accepts the supplied arguments 
    vDSP_vclip(CConstPointer<CFloat>(&dstAsFloat), 
    vDSP_Stride(1), 
    CConstPointer<CFloat>(&min), 
    CConstPointer<CFloat>(&max), 
    CMutablePointer<CFloat>(&dstAsFloat), 
    vDSP_Stride(1), 
    l) – 
Run Code Online (Sandbox Code Playgroud)

我试图摆脱它,但到目前为止,没有运气.

Lau*_*ent 0

经过一些调整,我让它可以工作。请注意,第一个参数没有 & 符号 (CConstPointer)。然而第二个确实如此(我对 src 和 dst 使用相同的指针)。我还替换了值的转换(必要的)。您需要使用 CFloats 作为上限值。这是代码:

let width: UInt = CGBitmapContextGetWidth(context)
let height: UInt = CGBitmapContextGetHeight(context)

var dstAsFloat = CFloat[](count: Int(width*height), repeatedValue: 0)

if shouldClip {
    var min:CFloat = 0.0
    var max:CFloat = 255.0
    vDSP_vclip(dstAsFloat, CLong(1), &min, &max, &dstAsFloat, CLong(1), UInt(width*height))

}
Run Code Online (Sandbox Code Playgroud)