gpt4 book ai didi

ios - 来自 CMSampleBufferRef 转换的 UIImage,导致 UIImage 无法正确呈现

转载 作者:行者123 更新时间:2023-11-29 12:23:13 24 4
gpt4 key购买 nike

我正在与 AV Foundation 合作,我正在尝试保存一个特定的在某个变量中将 CMSampleBufferRef 输出为 UIImage。我正在使用 manatee works示例代码及其使用

kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange

kCVPixelBufferPixelFormatTypeKey

NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange];

NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[captureOutput setVideoSettings:videoSettings];

但是当我保存图像时,输出只是 nil 或者 ImageView 的背景。我也尝试不设置输出设置,只使用默认但没有用的任何设置。图像仍未渲染。我还尝试设置 kCVPixelFormatType_32BGRA 但随后海牛工作停止检测条形码。

我正在使用 apple 提供的示例代码中的上下文设置 on developer website

// Create a bitmap graphics context with the sample buffer data
CGContextRef context = CGBitmapContextCreate(NULL,
CVPixelBufferGetWidth(imageBuffer),
CVPixelBufferGetHeight(imageBuffer),
8,
0,
CGColorSpaceCreateDeviceRGB(),
kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
// Create a Quartz image from the pixel data in the bitmap graphics context
CGImageRef quartzImage = CGBitmapContextCreateImage(context);

谁能帮我解决这里出了什么问题?它应该很简单,但我对 AVFoundation 框架没有太多经验。这是不是一些颜色空间问题,因为上下文正在使用 CGColorSpaceCreateDeviceRGB()

如果需要,我可以提供更多信息。我搜索了 StackOverflow,有很多关于此的条目,但没有一个解决了我的问题

最佳答案

您将 bytesPerRow 的 0 传递给 CGBitmapContextCreate 是否有原因?此外,您将 NULL 作为缓冲区而不是 CMSampleBufferRef 地址传递。

sampleBuffer 是您的 CMSampleBufferRef 时,创建位图上下文应该大致如下所示:

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
CVPixelBufferLockBaseAddress(imageBuffer,0);
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef context = CGBitmapContextCreate(baseAddress,
CVPixelBufferGetWidth(imageBuffer),
CVPixelBufferGetHeight(imageBuffer),
8,
CVPixelBufferGetBytesPerRow(imageBuffer),
colorSpace,
kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
// Create a Quartz image from the pixel data in the bitmap graphics context
CGImageRef quartzImage = CGBitmapContextCreateImage(context);

CGColorSpaceRelease(colorSpace);
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
CGContextRelease(newContext);

关于ios - 来自 CMSampleBufferRef 转换的 UIImage,导致 UIImage 无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29988995/

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