在 iOS 中使用 Swift 导出 16 位图像
Exporting 16 bit image with Swift in iOS
我想导出 16 位图像,我有以下代码
let bv = malloc(width * height * 4)!
var db = vImage_Buffer(data: bv,
height: vImagePixelCount(height),
width: vImagePixelCount(width),
rowBytes: width*2)
// vImageConvert_PlanarFtoPlanar8(&sourceBuffer, &destBuffer, 1.0, 0.0, vImage_Flags(kvImageNoFlags))
vImageConvert_PlanarFtoPlanar16F(&sourceBuffer, &db, vImage_Flags(kvImageNoFlags))
let bp = bv.assumingMemoryBound(to: UInt8.self)
let p = CGDataProvider(data: CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
bp,
width * height,
kCFAllocatorDefault))!
let cgImage = CGImage(width: width,
height: height,
bitsPerComponent: 5,
bitsPerPixel: 16,
bytesPerRow: width,
space: CGColorSpace(name: CGColorSpace.linearSRGB)!,
bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.noneSkipFirst.rawValue),
provider: p,
decode: nil,
shouldInterpolate: false,
intent: .defaultIntent)!
let savePath = self.documentsPath.appendingPathComponent("camera")
let sURL = savePath.appendingPathComponent(String(format: "image.png")
if let imageDestination = CGImageDestinationCreateWithURL(smoothedSceneDepthURL as CFURL, kUTTypePNG, 1, nil) {
CGImageDestinationAddImage(imageDestination, cgImage, nil)
CGImageDestinationFinalize(imageDestination)
}
Apple 文档说 bitsPerComponent 和 bitsPerPixel 的这些值对于 iOS here
是正确的
但是我收到以下错误:
[Unknown process name] CGImageCreate: invalid image bits/pixel or bytes/row.
我能够导出 8 位灰度图像,并且可以 post 如果需要参数 btw
如果每个像素有 16 位,那么每行将有 2*width
个字节:
bytesPerRow: 2 * width,
我想导出 16 位图像,我有以下代码
let bv = malloc(width * height * 4)!
var db = vImage_Buffer(data: bv,
height: vImagePixelCount(height),
width: vImagePixelCount(width),
rowBytes: width*2)
// vImageConvert_PlanarFtoPlanar8(&sourceBuffer, &destBuffer, 1.0, 0.0, vImage_Flags(kvImageNoFlags))
vImageConvert_PlanarFtoPlanar16F(&sourceBuffer, &db, vImage_Flags(kvImageNoFlags))
let bp = bv.assumingMemoryBound(to: UInt8.self)
let p = CGDataProvider(data: CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
bp,
width * height,
kCFAllocatorDefault))!
let cgImage = CGImage(width: width,
height: height,
bitsPerComponent: 5,
bitsPerPixel: 16,
bytesPerRow: width,
space: CGColorSpace(name: CGColorSpace.linearSRGB)!,
bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.noneSkipFirst.rawValue),
provider: p,
decode: nil,
shouldInterpolate: false,
intent: .defaultIntent)!
let savePath = self.documentsPath.appendingPathComponent("camera")
let sURL = savePath.appendingPathComponent(String(format: "image.png")
if let imageDestination = CGImageDestinationCreateWithURL(smoothedSceneDepthURL as CFURL, kUTTypePNG, 1, nil) {
CGImageDestinationAddImage(imageDestination, cgImage, nil)
CGImageDestinationFinalize(imageDestination)
}
Apple 文档说 bitsPerComponent 和 bitsPerPixel 的这些值对于 iOS here
是正确的但是我收到以下错误:
[Unknown process name] CGImageCreate: invalid image bits/pixel or bytes/row.
我能够导出 8 位灰度图像,并且可以 post 如果需要参数 btw
如果每个像素有 16 位,那么每行将有 2*width
个字节:
bytesPerRow: 2 * width,