gpt4 book ai didi

ios - RBG24 在 Windows 上可以很好地播放,但在 iOS 上却不行

转载 作者:行者123 更新时间:2023-11-29 13:32:22 25 4
gpt4 key购买 nike

通过解码器将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上可以播放的很好,但是在从RGB24转换为BGR24之前,在iOS上就出错了。

最佳答案

这是一个标准的字节顺序问题。哪个字节表示哪个颜色不是RGB 标准化的。 Windows 在 MSB 中使用 R,而 Mac/iOS 在 LSB 中使用 R。因此,在 Windows 和 Mac/iOS 之间移动 RGB 时,您始终需要进行字节顺序转换。请注意,您可能会发现使用 Accelerate 框架的 vImagePermuteChannels_ARGB8888 执行此类转换比编写您自己的代码更有效。

关于ios - RBG24 在 Windows 上可以很好地播放,但在 iOS 上却不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11539073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com