通过解码器将 H264 视频转换为 rgb24 文件,它可以在 Windows 上很好地显示,但是当我使用 UIImage 在 UIImageView 上显示它时,它的颜色不正确。我这样使用的代码:
- (UIImage *)imageFromAVPicture:(const UInt8 *)pict width:(int)width height:(int)height
{
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, pict, width*height*3,kCFAllocatorNull);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef cgImage = CGImageCreate(width,
height,
8,
24,
width*3,
colorSpace,
bitmapInfo,
provider,
NULL,
YES,
kCGRenderingIntentDefault);
CGColorSpaceRelease(colorSpace);
UIImage *image = [self scaleImage:cgImage];
//UIImage *image = [[UIImage alloc] initWithCGImage:cgImage];
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CFRelease(data);
return image;
}
但是在创建CGImage之前,添加如下代码,它的显示是正确的,下面的代码所做的就是在t rgb和bgr之间进行转换。
UInt8 tmpBuff1,*tmpBuff2;
tmpBuff2 = (UInt8 *)pict;
for(int i =0;i<height;i++)
{
for(int j=0;j<width;j++)
{
tmpBuff1 = *tmpBuff2;
*tmpBuff2 = *(tmpBuff2+2);
*(tmpBuff2+2) = tmpBuff1;
tmpBuff2 += 3;
}
}
从rgb转换为bgr后,它的显示将是正确的。
所以我想知道为什么,为什么相同的RGB24文件在PC上可以很好地播放,但在从RGB24转换为BGR24之前在iOS上却出错了。