Obwohl es sich um eine nicht-triviale Aufgabe handelt, ist es möglich, AVDepthData zu generieren und sie zu Ihrem eigenen Bild hinzuzufügen.
- schaffen eine Tiefe/Disparität Wörterbuch wie das dokumentiert in
CGImageSource.h
CGImageSourceCopyAuxiliaryDataInfoAtIndex
- jedoch folgende sind weitere Details:
Key kCGImageAuxiliaryDataInfoData
- (CFDataRef
) - die Tiefendaten
nur eine binäre Enthält Pixelpuffer. Wie in den Daten, die Sie aus einem Pixelpuffer ziehen, indem Sie den Zeiger in CVPixelBufferLockBaseAddress lesen. Sie erstellen die CVPixelBuffer mit einem Format von einem der unterstützten Typen:
- kCVPixelFormatType_DisparityFloat16 = 'HDIs',/* IEEE754-2008 binary16 (Halb float), die normalisierte Verschiebung beschreiben, wenn zwei Bilder zu vergleichen. Einheiten sind 1/Meter: (pixelShift/(pixelFocalLength * baselineInMeters)) */
- kCVPixelFormatType_DisparityFloat32 = 'fdis',/* IEEE754-2008 binary32 float, beschreibt die normalisierte Verschiebung beim Vergleich zweier Bilder. Einheiten sind 1/Meter: (pixelShift/(pixelFocalLength * baselineInMeters)) */
- kCVPixelFormatType_DepthFloat16 = 'hdep',/* IEEE754-2008 binary16 (halb float), beschreibt die Tiefe (Abstand zu einem Objekt) in Metern */
- kCVPixelFormatType_DepthFloat32 = 'FDEP',/* IEEE754-2008 binary32 float, beschreibt die Tiefe (Abstand zu einem Objekt) in m */
eine beliebige Graustufenbild in einen gefälschten Tiefenpuffer zu aktivieren, man‘ ll müssen pro Pixel konvertieren, was auch immer Ihre Graustufen Pixelwerte sind (0 = schwarz zu 1 = weiß, zNear zu zFar, etc) zu entweder Meter oder 1/Meter je nach Ihrem Zielformat. Und bringen Sie sie in das richtige Gleitkommaformat, je nachdem, woher Sie sie erhalten.
Key kCGImageAuxiliaryDataInfoDataDescription
- (CFDictionary
) - die Tiefendaten Beschreibung
erfahren Sie, wie diese Puffer für den wir Ihnen geben interpretieren, oder sagt uns, wie ein Puffer interpretieren Sie uns geben:
- kCGImagePropertyPixelFormat ist einer der Corevideo/CVPixelBuffer.h Tiefe/Disparität Formate
- kCGImagePropertyWidth/Höhe sind die Pixelabmessungen
- kCGImagePropertyBytesPerRow ist richtig, was es auf dem Zinn sagt
Key kCGImageAuxiliaryDataInfoMetadata
- (CGImageMetadataRef
) - Metadaten
Dieser Wert ist optional.
- Erstellen Sie AVDepthData mit init(fromDictionaryRepresentation: [AnyHashable : Any]) und übergeben Sie das oben erstellte Wörterbuch.
ein Bild erstellen ImageI/O mit:
// create the image destination (not shown)
// add an image to the destination
CGImageDestinationAddImage(cgImageDestination, renderedCGImage, attachments)
// Use AVDepthData to get auxiliary data dictionary
var auxDataType: NSString?
lassen AUXDATA = depthData.dictionaryRepresentation (forAuxiliaryDataType: & auxDataType)
// Add auxiliary data to image destination
CGImageDestinationAddAuxiliaryDataInfo(cgImageDestination, auxDataType!, auxData! as CFDictionary)
if CGImageDestinationFinalize(cgImageDestination) {
return data as Data
}
Ausgezeichnet, danke! – Guig