1
通過解碼器將H264視頻轉換爲rgb24文件,它可以很好地在Windows上顯示,但是當我使用UIImage在UIImageView上顯示時,它的顏色不正確。 我因爲這樣使用代碼:RBG24可以在Windows上播放,但在iOS上它不能
- (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,添加代碼如下,其表演將是正確的,什麼下面的代碼做的是轉變betweent 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上出現錯誤。
哦,非常感謝! – zhzhy 2012-07-19 02:06:46