gpt4 book ai didi

iphone - CGImageCreate 中的颜色失真

转载 作者:太空狗 更新时间:2023-10-30 03:36:16 47 4
gpt4 key购买 nike

我正在尝试为我的 iOS 应用构建图像捕获,但我的 CGImage 结果总是出现颜色失真。这是相机预览,正确的颜色。

enter image description here

可乐是红色的,一切都好。

当我运行我的快照代码时,我得到了这个:

enter image description here

可乐是蓝色的……这是从哪里来的?

我尝试弄乱一些参数,但最终根本得不到任何图像。这是我的快照代码:

int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = [cameraVideo bufRowBytes];
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, [cameraVideo bufDataPtr], [cameraVideo bufWidth]*[cameraVideo bufHeight]*4, NULL);

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipLast;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentPerceptual;

CGImageRef imageRef = CGImageCreate( [cameraVideo bufWidth], [cameraVideo bufHeight], bitsPerComponent, bitsPerPixel,
bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);

CGColorSpaceRelease(colorSpaceRef);

我无能为力,所以如果有人看到我做错了什么,请告诉我。

已修复

这是最终代码:

if (cameraVideo.ARPixelFormat == kCVPixelFormatType_32ARGB) {
bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaNoneSkipFirst;
} else {
bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst;
}

最佳答案

看起来您的 R(红色)和 B(蓝色) channel 已互换。相机正在按 BGR 顺序填充缓冲区,但你告诉 CGImage数据在 RGB 中命令。我相信您可以使用 kCGBitmapByteOrder... 之一来控制它CGBitmapInfo 中的常量.尝试设置 bitmapInfo像这样:

CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big;

如果这不起作用,请尝试另一个 kCGBitmapByteOrder...常量( kCGBitmapByteOrder32LittlekCGBitmapByteOrder16BigkCGBitmapByteOrder16Little )。

编辑

Apple 的 SquareCam 示例项目有一个名为 SquareCam/SqareCamViewController.m 的文件(是的,文件名中的“Square”拼写错误)。它包含以下代码:

    sourcePixelFormat = CVPixelBufferGetPixelFormatType( pixelBuffer );
if ( kCVPixelFormatType_32ARGB == sourcePixelFormat )
bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaNoneSkipFirst;
else if ( kCVPixelFormatType_32BGRA == sourcePixelFormat )
bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst;
else
return -95014; // only uncompressed pixel formats

您可能想做同样的事情。

关于iphone - CGImageCreate 中的颜色失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9920836/

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