如何在 swift 中创建 Pixel_8 缓冲区

How to create a Pixel_8 buffer in swift

我正在尝试转换 swift 中的 objective-c 代码,但我完全无法寻找获得 Pixel_8 缓冲区(我通常会创建的缓冲区)的方法使用 calloc 在 objective-c) 在 swift.

这是 Objective-c 中的示例...它如何转换为 swift?

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

试试这个方法

声明

 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

您可以在 Swift 中使用 calloc(),但您必须 "bind" 原始 指向所需类型的指针:

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>.

的函数