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を作成する前に、次のようにコードを追加してください。その表示は正しくなります。次のコードは、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でうまく再生できるのに、iOSではRGB24からBGR24に変換する前に間違っているのかを知りたいのです。