2010-10-25 30 views
9

Tôi đang lấy UIImage từ tệp Png và đưa nó vào videoWriter.Màu sắc của video sai khi được tạo từ UIImage của các tệp PNG

avAdaptor appendPixelBuffer: pixelBuffer

Khi video kết quả cuối cùng đi ra, nó dường như thiếu một màu, thiếu màu vàng hoặc một cái gì đó.

tôi mất alook của hàm khiến các pixelbuffer ra khỏi UIImage

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

Tôi cũng thử kCVPixelFormatType_32AGRB và những người khác, nó đã không giúp đỡ.

bất kỳ suy nghĩ nào?

+1

Định dạng của tệp PNG là gì? Bạn đã thử các định dạng pixel nào khác? – appas

Trả lời

1

Vui lòng xác minh xem hình ảnh PNG của bạn có hoặc không có phần tử trong suốt. Nếu hình ảnh PNG của bạn không chứa độ trong suốt thì đó là hình ảnh 24 bit và không phải 32 bit trên mỗi pixel.

Ngoài ra, bạn đã thử kCVPixelFormatType_32RGBA chưa?

0

Có thể kích thước hình ảnh không vừa với nhau.

Hình ảnh đầu vào của bạn phải có cùng chiều rộng và chiều cao như đầu ra video. Nếu "myWidth" hoặc "myHeight" khác (tức là tỷ lệ khung hình khác nhau) với kích thước của hình ảnh, một byte có thể bị mất ở cuối dòng, có thể dẫn đến chuyển màu. kCVPixelFormatType_32BGRA có vẻ là định dạng pixel ưa thích (nhanh nhất), vì vậy điều này sẽ không sao.

Không có màu vàng trong không gian màu RGB. Điều này có nghĩa là màu vàng chỉ là các thành phần> màu đỏ < và> màu xanh lá cây <. Có vẻ như thiếu màu xanh <.

Tôi cho rằng bạn đang sử dụng CFDataRef (có thể là NSData) cho hình ảnh. Nếu đó là đối tượng NSData, bạn có thể in các byte vào bảng điều khiển gỡ lỗi bằng cách sử dụng

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

Thao tác này sẽ in kết xuất hex vào bảng điều khiển. Ở đây bạn có thể thấy nếu bạn có alpha và loại thứ tự byte của bạn là như nhau. Nếu hình ảnh của bạn có alpha, mỗi byte thứ tư phải là cùng một số.

Các vấn đề liên quan