2016-07-12 31 views
2

CGImageCVPixelBuffer으로 신속하게 변환하려면 어떻게해야합니까?swift - CGImage to CVPixelBuffer

나는 반대 질문을 던지려고 노력하고 있으며, 객관적인 C 답을 알고 싶습니다. 예를 들어 this one과 같은 질문을했지만 신속하게 처리 할 수는 없습니다.

func pixelBufferFromCGImage(image: CGImage) -> CVPixelBuffer { 
    var pxbuffer: CVPixelBuffer? = nil 
    let options: NSDictionary = [:] 

    let width = image.width 
    let height = image.height 
    let bytesPerRow = image.bytesPerRow 

    let dataFromImageDataProvider = image.dataProvider!.data 
    let x = CFDataGetBytePtr(dataFromImageDataProvider) 

    CVPixelBufferCreateWithBytes(
     kCFAllocatorDefault, 
     width, 
     height, 
     kCVPixelFormatType_32ARGB, 
     CFDataGetBytePtr(dataFromImageDataProvider), 
     bytesPerRow, 
     nil, 
     nil, 
     options, 
     &pxbuffer 
    ) 
    return pxbuffer!; 
} 

당신은 그렇게, UnsafeMutablePointer를 사용할 필요가

+0

당신이 목표 - C에서이 작업을 수행하는 방법을 알고 있다면, 왜 생을 쓸 수 없습니다 한 가지 방법 _in_ Objective-C와 사물을 얻으시겠습니까? – matt

+0

저는 Swift에서 프로젝트를 시작하기 때문에 그 언어로 물건을 얻을 시간을 할애 할 의향이 있습니다. Objective-C도 잘 모릅니다. (실제로 더 많이 배우기를 바랍니다. to) – Guig

+0

그래서 UnsafePointer를 UnsafeMutablePointer로 바꾸는 방법에 대한 질문이 있습니까? 왜냐하면 그다지 어렵지 않기 때문입니다. – matt

답변

0

(CVPixelBufferCreateWithBytes excepts UnsafeMutablePointer 및 CFDataGetBytePtr(dataFromImageDataProvider)UnsafePointer<UIint8>! 때문에이 컴파일되지 않습니다), 당신은 CFData을 변환 할 수 있습니다 : 여기있어 가장 가까운입니다 다음 CFMutableData과에 예를 들어 에게 UnsafeMutablePointer를 얻을 :

let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data) 
let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)