2015-03-19 37 views
1

這是我目前所擁有的。我想知道是否有更好的方法來做到這一點,或者更好的方法是將數組轉換爲所需的類型,而無需遍歷整個結構。在Swift中將位數組轉換爲結構的最佳方法

我的輸入是包含像素數據的CFDataRef。我想將其轉換爲像素數組。

struct Pixel { 
    let r: UInt8 
    let g: UInt8 
    let b: UInt8 
    let a: UInt8 
} 

var intArray = [UInt8](count: CFDataGetLength(data), repeatedValue: 0) 
let dataRange = CFRangeMake(0, CFDataGetLength(data)) 
CFDataGetBytes(data, dataRange, &intArray) 

var pixelArray : [Pixel] = [] 
for var i = 0; i < intArray.count; i += 4 { 
    let p = Pixel(r: intArray[i], g: intArray[i+1], b: intArray[i+2], a: intArray[i+3]) 
    pixelArray.append(p) 
} 
+0

您可能會看到疊加在intArray上的UnsafeBufferPointer 。詳細信息由您決定。 – GoZoner 2015-03-19 04:04:29

回答

1

感謝@ GoZoner的提示,我在Apple DevForums上找到了this thread。以下是我最後的工作解決方案。

struct Pixel { 
    let r: UInt8 
    let g: UInt8 
    let b: UInt8 
    let a: UInt8 
} 

let data: CFData! = ... 
let width: Int = ... 
let height: Int = ... 

let pixelPtr = UnsafePointer<Pixel>(CFDataGetBytePtr(data)) 
let pixelBuf = UnsafeBufferPointer<Pixel>(start: pixelPtr, count:width*height) 
相關問題