2016-07-12 4 views
2

Как преобразовать CGImage в CVPixelBuffer в swift?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!; 
} 

(это не компилируется, потому что CVPixelBufferCreateWithBytes excepts UnsafeMutablePointer и CFDataGetBytePtr(dataFromImageDataProvider) является UnsafePointer<UIint8>!)

+0

Если вы знаете, как сделать это в Objective-C, то почему бы не написать Тхи s один метод _in_ Objective-C и заняться вещами? – matt

+0

Потому что я начинаю проект в Swift, и я готов поставить время, чтобы получить информацию на этом языке, и я не знаю Objective-C (и я не хочу больше узнать об этом, to) – Guig

+0

Вопрос в том, как превратить UnsafePointer в UnsafeMutablePointer? Потому что это не очень сложно. – matt

ответ

0

Вы должны использовать UnsafeMutablePointer, чтобы сделать это, вы можете превратить CFData к CFMutableData, а затем получить UnsafeMutablePointer, например:

let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data) 
let x = CFDataGetMutableBytePtr(dataFromImageDataProvider) 
Смежные вопросы