我目前正在使用[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.叹息。
答案 0 :(得分:2)
ContiguousArray
和Array
之间的主要区别是,当元素类型是类或@objc
协议时,后者使用不同的存储(这样可以轻松地桥接到Obj- C)。如果元素类型不是类,它们都在内部使用相同的存储,并且您选择哪一个并不重要。
在您的情况下,元素类型不是类,因此[UInt8]
的行为与ContiguousArray<UInt8>
相同。