2010-10-25 4 views
9

Je prends un fichier UIImage à partir du fichier Png et le nourris au videoWriter.La couleur de la vidéo est fausse quand elle est faite à partir de UIImage des fichiers PNG

avAdaptor appendPixelBuffer: pixelBuffer

Lorsque le résultat final vidéo sort, il semble manquer une couleur, manquant la couleur jaune ou quelque chose.

Je prends alook de la fonction qui a fait la pixelbuffer de la UIImage

CVPixelBufferCreateWithBytes(NULL, 
          myWidth, 
          myHeight, 
          kCVPixelFormatType_32BGRA, 
          (void*)CFDataGetBytePtr(image), 
          CGImageGetBytesPerRow(cgImage), 
          NULL, 
          0, 
          NULL, 
          &pixelBuffer); 

J'essaie aussi kCVPixelFormatType_32AGRB et d'autres, il n'a pas aidé.

des pensées?

+1

Quel est le format du fichier PNG? Quels autres formats de pixels avez-vous essayé? – appas

Répondre

1

Veuillez vérifier si votre image PNG est avec ou sans élément transparent. Si votre image PNG ne contient pas de transparence, c'est 24 bits et non 32 bits par pixel.

Avez-vous essayé kCVPixelFormatType_32RGBA?

0

Les tailles d'image ne sont peut-être pas compatibles.

Votre image d'entrée doit avoir la même largeur et la même hauteur que la sortie vidéo. Si "myWidth" ou "myHeight" est différent (rapport d'aspect différent) à la taille de l'image, un octet peut être perdu à la fin de la ligne, ce qui peut entraîner un décalage de couleur. kCVPixelFormatType_32BGRA semble être le format de pixel préféré (le plus rapide), donc cela devrait être correct.

Il n'y a pas de couleur jaune dans l'espace colorimétrique RVB. Cela signifie que le jaune n'est que le> rouge < et> les composants verts <. Il semble que> < bleu est manquant.

Je suppose que vous utilisez un CFDataRef (peut-être NSData) pour l'image. Si un objet NSData vous pouvez imprimer les octets à la console de débogage en utilisant

NSLog(@"data: %@", image); 

Cela affichera un vidage hexadécimal à la console. Ici vous pouvez voir si vous avez l'alpha et quel genre d'ordre de byte votre png est semblable. Si votre image est en alpha, un octet sur quatre devrait être le même.

Questions connexes