我应该使用Swift ContiguousArray来保存图像数据吗?

时间:2017-10-04 00:31:23

标签: arrays swift core-graphics

我目前正在使用[UInt8]类型的缓冲区来保存从CGImage读取的像素数据,如下所示:

var pixels = [UInt8](repeatElement(0, count: bytesPerRow*Int(height)))
let context = CGContext.init(data: &pixels,
                             width: width,
                             height: height,
                             bitsPerComponent: 8,
                             bytesPerRow: bytesPerRow,
                             space: colorSpace,
                             bitmapInfo: bitmapInfo)
 context!.draw(cgImage, in: rect)

这段代码假设pixels是一个连续的字节数组,保存图像数据,似乎工作正常。我有这种不安的感觉我应该使用ContiguousArray来做这件事。我真的生活在危险的地方,应该做些什么吗?

除此之外:当我总是知道发生了什么事时,我会想念普通的C.叹息。

1 个答案:

答案 0 :(得分:2)

ContiguousArrayArray之间的主要区别是,当元素类型是类或@objc协议时,后者使用不同的存储(这样可以轻松地桥接到Obj- C)。如果元素类型不是类,它们都在内部使用相同的存储,并且您选择哪一个并不重要。

在您的情况下,元素类型不是类,因此[UInt8]的行为与ContiguousArray<UInt8>相同。