我有一幅画,像这样:
let image = CGImage(jpegDataProviderSource: dataProvider!,
decode: nil, shouldInterpolate: false,
intent: CGColorRenderingIntent.defaultIntent)现在我想把它转换成CVPixelBuffer。
我检查了多个解决方案。看来他们已经过时了。
例如:
let image_cv = pixelBufferFromCGImage(image: <#T##CGImage#>)
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)
let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data)
let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)
CVPixelBufferCreateWithBytes(
kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_32ARGB,
CFDataGetBytePtr(dataFromImageDataProvider),
bytesPerRow,
nil,
nil,
options,
&pxbuffer
)
return pxbuffer!;
}不编译是因为:
Cannot convert value of type 'UnsafePointer<UInt8>?' to expected argument type 'UnsafeMutableRawPointer'我还尝试使用以下函数:https://github.com/hollance/CoreMLHelpers/blob/master/CoreMLHelpers/CGImage%2BCVPixelBuffer.swift
但我收到:
Value of optional type 'CVPixelBuffer?' (aka 'Optional<CVBuffer>') must be unwrapped to a value of type 'CVPixelBuffer' (aka 'CVBuffer')我该怎么解决呢?
谢谢
发布于 2022-04-01 17:10:28
你能试着用变量x替换参数CFDataGetBytePtr(dataFromImageDataProvider)吗?
所以看起来:
let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data)
let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)
CVPixelBufferCreateWithBytes(
kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_32ARGB,
x,
bytesPerRow,
nil,
nil,
options,
&pxbuffer
)https://stackoverflow.com/questions/67391422
复制相似问题