1

Ich möchte einen CIImage in einen Pixelpuffer vom Typ kCVPixelFormatType_128RGBAFloat rendern. Aber CIContext.render() schlägt fehl, "nicht unterstütztes Format" zu sagen. Getestet habe ich auf dem iPhone 7 plus mit iOS 11.Wie rendere ich einen CImage in einen Fließkomma-Pixelpuffer mit 32 Bit pro Kanal?

Hier ist mein Code:

let context = CIContext() 
var buffer: CVPixelBuffer? = nil 
let buffer = CVPixelBufferCreate(nil, 
           width, 
           height, 
           kCVPixelFormatType_128RGBAFloat, 
           nil, 
           &buffer) 
assert(buffer != nil, "Couldn't create buffer") 
context.render(ciImage, to: buffer) 

Der Puffer erfolgreich erstellt wurde - die Behauptung nicht ausgelöst. Es ist nur das Rendering in der letzten Zeile, das nicht "nicht unterstütztes Format" sagt.

Ich habe auch versucht, eine IOSurface-backed CVPixelBuffer durch Ersetzen der zweiten Null mit [kCVPixelBufferIOSurfacePropertiesKey: [:]] as CFDictionary, aber es hat nicht geholfen.

Wie bekomme ich das zur Arbeit?

Das Format muss kCVPixelFormatType_128RGBAFloat sein, aus Gründen, die zu komplex sind, um hier hineinzukommen, die kurze Version besteht darin, dass die Pixelwerte einen größeren Bereich als 0-255 haben, einschließlich Bruchzahlen, die nicht gerundet werden können.

Ich habe versucht, ein paar mehr Dinge:

Keine von diesen funktioniert. Wird das Rendern auf 32-Bit pro Kanal Float oder 16 Bit pro Kanal Ints nicht von Core Image unterstützt?

Antwort

Verwandte Themen