Gui*_*uig 5 cgimage swift cvpixelbuffer
如何快速将 a 转换CGImage为 a CVPixelBuffer?
我知道有很多问题试图做相反的事情,还有一些客观的 C 答案,比如这个,但我无法让它们迅速工作。这是我最接近的:
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!;
}
Run Code Online (Sandbox Code Playgroud)
(这不会编译,因为CVPixelBufferCreateWithBytesUnsafeMutablePointer 除外,并且CFDataGetBytePtr(dataFromImageDataProvider)是UnsafePointer<UIint8>!)
您需要使用 UnsafeMutablePointer,为此,您可以转换CFData为CFMutableData然后获取UnsafeMutablePointer例如:
let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data)
let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3515 次 |
| 最近记录: |