Ich habe eine App, die Live-Video im Format kCVPixelFormatType_420YpCbCr8BiPlanarFullRange erfasst, um den Y-Kanal zu verarbeiten. Laut Apples Dokumentation:
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange Bi-Planar-Komponente Y'CbCr 8-Bit 4: 2: 0, Vollbereich (Luma = [0,255] Chroma = [1,255]). baseAddr zeigt auf eine Big-Endian-CVPlanarPixelBufferInfo_YCbCrBiPlanar-Struktur.
Ich möchte einige dieser Frames in einem UIViewController präsentieren, gibt es eine API, um die Konvertierung in das Format kCVPixelFormatType_32BGRA vorzunehmen? Können Sie einen Hinweis geben, um diese Methode von Apple zu tunen?
%Vor%Danke!
Ich bin mir keiner zugänglichen Möglichkeit bewusst, ein biplanares Y / CbCr-Bild in iOS in RGB zu konvertieren. Sie sollten jedoch in der Lage sein, die Konvertierung selbst in Software durchzuführen, z. B.
%Vor% Nur direkt in dieses Feld geschrieben und ungetestet, ich denke, ich habe die cb / cr Extraktion korrekt. Sie würden dann CGBitmapContextCreate
mit rgbBuffer
verwenden, um ein CGImage
und damit ein UIImage
zu erstellen.
Die meisten Implementierungen, die ich gefunden habe (einschließlich der vorherigen Antwort hier) funktionieren nicht, wenn Sie videoOrientation
in AVCaptureConnection
ändern (aus irgendeinem Grund, den ich nicht vollständig verstehe, ist die CVPlanarPixelBufferInfo_YCbCrBiPlanar
struct leer Fall), also schrieb ich einen, der das tut (der Großteil des Codes basierte auf dieser Antwort ). Meine Implementierung fügt dem RGB-Puffer auch einen leeren Alphakanal hinzu und erstellt CGBitmapContext
mit dem kCGImageAlphaNoneSkipLast
-Flag (es gibt keine Alpha-Daten, aber iOS scheint 4 Bytes pro Pixel zu benötigen). Hier ist es:
Tags und Links objective-c iphone ios avfoundation