2016-07-12 78 views
2

如何将swift中的CGImage转换为CVPixelBufferswift - CGImage到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节选的UnsafeMutablePointer和CFDataGetBytePtr(dataFromImageDataProvider)UnsafePointer<UIint8>!

+0

如果你知道如何在Objective-C这样做,为什么不写THI一种方法_in_ Objective-C并继续进行下去? – matt

+0

因为我在Swift中开始一个项目,所以我愿意花时间用这种语言来获取东西,而且我也不了解Objective-C(我也不是很愿意学习它,我真的有更多到) – Guig

+0

那么,如何将一个UnsafePointer变成一个UnsafeMutablePointer?因为这不是很困难。 – matt

回答

0

您需要使用UnsafeMutablePointer,要做到这一点,您可以将CFDataCFMutableData然后得到UnsafeMutablePointer例如:

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