Ab iOS6 hat Apple die Bereitstellung von nativem YUV für CImage über diesen Aufruf vorgesehen.
initWithCVPixelBuffer: Optionen:
In der zentralen Anleitung zur Bildprogrammierung haben sie von dieser Funktion gesprochen
Nutzen Sie die Unterstützung für YUV-Image in iOS 6.0 und höher. Kamera Pixel Puffer sind nativ YUV aber die meisten Bildbearbeitung Algorithmen erwarten RBGA-Daten. Es gibt Kosten für die Konvertierung zwischen den zwei. Core Image unterstützt das Lesen von YUB aus CVPixelBuffer-Objekten und Anwenden der entsprechenden Farbumwandlung.
Optionen = @ {(ID) kCVPixelBufferPixelFormatTypeKey: @ (kCVPixelFormatType_420YpCvCr88iPlanarFullRange)};
Aber ich kann es nicht richtig benutzen. Ich habe eine rohe YUV-Daten. Also, das ist was ich gemacht habe
%Vor%Ich bekomme kein Bild. Irgendeine Idee, was ich vermisse.
BEARBEITEN: Ich habe die Sperre hinzugefügt und die Basisadresse vor dem Anruf entsperrt. Außerdem habe ich die Daten des pixelpuffers gelöscht, um sicherzustellen, dass pixellbuffer die Daten festhält. Es scheint nur etwas mit dem Init-Aufruf falsch zu sein. Still CIImage-Objekt gibt Nil zurück.
%Vor% In der Konsole sollte eine Fehlermeldung angezeigt werden: initWithCVPixelBuffer failed because the CVPixelBufferRef is not IOSurface backed
. In Apples Technischer Q & A QA1781 erfahren Sie, wie Sie eine IOSurface-unterstützte CVPixelBuffer
erstellen. .
%Vor%Der Aufruf von
CVPixelBufferCreateWithBytes()
oderCVPixelBufferCreateWithPlanarBytes()
führt zuCVPixelBuffers
, die nicht IOSurface-backed sind ...... Dazu müssen Sie
kCVPixelBufferIOSurfacePropertiesKey
im WörterbuchpixelBufferAttributes
angeben, wenn Sie den Pixelpuffer mitCVPixelBufferCreate()
erstellen.
Alternativ können Sie IOSurface-backed
CVPixelBuffers
mitCVPixelBufferPoolCreatePixelBuffer()
aus einem vorhandenen Pixelpufferpool erstellen, wenn daspixelBufferAttributes
-Wörterbuch, das fürCVPixelBufferPoolCreate()
bereitgestellt wird,kCVPixelBufferIOSurfacePropertiesKey
enthält.
Ich arbeite an einem ähnlichen Problem und finde das gleiche Zitat von Apple ohne weitere Informationen darüber, wie man in einem YUV-Farbraum arbeitet. Ich stieß auf folgendes:
Standardmäßig wird in Core Image davon ausgegangen, dass es sich bei den Verarbeitungsknoten um RGB-Fließkommawerte mit 128 Bits pro Pixel, linearem Licht und vormultipliziertem RGBA handelt, die den Farbraum GenericRGB verwenden. Sie können einen anderen Arbeitsfarbraum angeben, indem Sie ein Quartz 2D CGColorSpace-Objekt bereitstellen. Beachten Sie, dass der Arbeitsfarbraum RGB-basiert sein muss. Wenn Sie YUV-Daten als Eingabe haben (oder andere Daten, die nicht RGB-basiert sind), können Sie ColorSync-Funktionen zum Konvertieren in den Arbeitsfarbraum verwenden. (Informationen zum Erstellen und Verwenden von CGColorspace-Objekten finden Sie unter Quartz 2D-Programmierhandbuch.) Mit 8-Bit YUV 4: 2: 2-Quellen kann Core Image 240 HD-Layer pro Gigabyte verarbeiten. Acht Bit YUV ist das native Farbformat für Videoquellen wie DV, MPEG, unkomprimiertes D1 und JPEG. Sie müssen YUV-Farbräume in einen RGB-Farbraum für Core Image konvertieren.
Ich stelle fest, dass es keine YUV-Farbräume gibt, nur Grau und RGB; und ihre kalibrierten Cousins. Ich bin mir nicht sicher, wie ich den Farbraum noch konvertieren soll, werde aber hier sicher berichten, wenn ich es herausfinden sollte.
Tags und Links objective-c ios ios6 core-image