如何在swift中创建Pixel_8缓冲区

时间:2017-04-08 11:38:53

标签: objective-c swift accelerate-framework

我正在尝试在swift中转换objective-c代码,并且我完全被阻止寻找获取Pixel_8缓冲区的方法(我通常在目标中使用calloc创建-c)在swift。

以下是Objective-c中的一个示例...它如何转换为swift?

Pixel_8 *buffer = (Pixel_8 *)calloc(width*height, sizeof(Pixel_8)); 

2 个答案:

答案 0 :(得分:2)

你可以在Swift中使用calloc(),但你必须“绑定”原始版本 指向所需类型的指针:

let buffer = calloc(width * height, MemoryLayout<Pixel_8>.stride).assumingMemoryBound(to: Pixel_8.self)

// Use buffer ...

free(buffer)

可替换地:

let buffer = UnsafeMutablePointer<Pixel_8>.allocate(capacity: width * height)
buffer.initialize(to: 0, count: width * height)

// Use buffer ...

buffer.deinitialize()
buffer.deallocate(capacity: width * height)

但最简单的解决方案是分配一个Swift数组:

var buffer = [Pixel_8](repeating: 0, count: width * height)

自动进行内存管理。您可以将buffer传递给 任何期望UnsafePointer<Pixel_8>的函数,或 将&buffer传递给期望UnsafeMutablePointer<Pixel_8>的任何函数。

答案 1 :(得分:0)

尝试这种方式

<强>声明

 typealias Pixel_8 = UInt8

<强> swift3

var buffer: Pixel_8? = (calloc(width * height, MemoryLayout<Pixel_8>.size) as? Pixel_8)

swift2

  var buffer = (calloc(width * height, sizeof(Pixel_8)) as! Pixel_8) 

Apple API reference