【发布时间】:2016-11-14 01:49:42
【问题描述】:
如何快速将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>!)
【问题讨论】:
-
如果你知道如何在 Objective-C 中做到这一点,为什么不在 Objective-C 中编写这个方法并继续进行操作?
-
因为我正在用 Swift 开始一个项目,我愿意花时间用那种语言来做东西,而且我也不了解 Objective-C(我也不愿意了解更多,我真的必须)
-
那么问题是如何将 UnsafePointer 变成 UnsafeMutablePointer?因为这不是很困难。
标签: swift cgimage cvpixelbuffer