2017-04-25 45 views
3

我在玩Swift中的圖像處理。使用this代碼訪問圖像像素。如何獲得UnsafeMutableBufferPointer的一部分作爲一個新的UnsafeMutableBufferPointer

圖像像素指向UnsafeMutableBufferPointer

所有像素數據的一個列表,每個像素位置需要被計算:

let index = y * rgba.width + x 
let pixel = pixels[index] 

我想添加一個subscript因此對於獲得

public subscript(index: Int) -> [Pixel] { 
    get { 
     var column = [Pixel]() 
     for i in 0..<height { 
      column.append(pixels[index*height + i]) 
     } 

     return column 
    } 
} 

那麼,有一種方法返回指向右列的UnsafeMutableBufferPointer?而不是一個數組?

我試圖避免更多的內存分配。

感謝

+0

除非我弄錯了,像素數據被安排在*行*不列。換句話說,列的像素不在連續的存儲器中。 –

+0

另請注意,UnsafeMutableBufferPointer是「非擁有」的,只有存在基礎元素存儲時纔有效。 –

+1

RGBA代碼泄漏內存:像素數據的分配內存永遠不會釋放。 –

回答

0

就像那個?:

public subscript(rowIndex: Int) -> UnsafePointer<Pixel> { 
    return pixels.baseAddress!.advanced(by: rowIndex * height) 
} 
public subscript(rowIndex: Int) -> UnsafeBufferPointer<Pixel> { 
    return UnsafeBufferPointer(start: self[rowIndex], count: height) 
} 
+0

這在代碼中有編譯錯誤。 – ilan

+0

它只是告訴你如何去做,你需要將它集成到你的特定設置中。 – hnh

相關問題