2017-04-25 1 views
3

나는 신속한 이미지 조작으로 놀고있다.UnsafeMutableBufferPointer의 일부를 새로운 UnsafeMutableBufferPointer로 가져 오는 방법

this 코드를 사용하여 이미지 픽셀에 액세스합니다.

이미지 픽셀은 UnsafeMutableBufferPointer으로 지정됩니다.

모든 픽셀은 하나 개의 데이터 목록에있는 모든 픽셀 위치를 계산해야합니다 :

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을 반환하는 방법이 있습니까? 배열 대신에?

더 많은 메모리 할당을 피하려고합니다. I 잘못 생각 않는

감사 것을 추천

+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

관련 문제