2017-04-25 3 views
3

私は迅速に画像操作をしています。UnsafeMutableBufferPointerの一部を新しいUnsafeMutableBufferPointerとして取得する方法

thisコードを使用して画像ピクセルにアクセスします。

画像のピクセルは、UnsafeMutableBufferPointerで示されています。

すべてのピクセルは、データの1つのリストにある、すべてのピクセル位置を用いて算出する必要があります

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

私が手

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

     return column 
    } 
} 

ためにそうsubscriptを追加しようとしているそうです右の列を指す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

関連する問題