kCVPixelFormatType_420YpCbCr8BiPlanarFullRange-Frame zu UIImage-Konvertierung

7

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!

    
zapador 12.01.2012, 16:23
quelle

2 Antworten

14

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.

    
Tommy 12.01.2012 16:40
quelle
10

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:

%Vor%     
Rodrigo Sieiro 22.07.2015 03:48
quelle