由 PNG 文件的 UIImage 制作的视频颜色错误

发布于 2024-09-29 01:50:44 字数 706 浏览 0 评论 0原文

我从 Png 文件中获取 UIImage 并将其提供给 videoWriter。

avAdaptorappendPixelBuffer:pixelBuffer

当最终结果视频出来时,它似乎缺少一种颜色,缺少黄色或其他东西。

我查看了从 UIImage 中生成像素缓冲区的函数,

CVPixelBufferCreateWithBytes(NULL,
                             myWidth,
                             myHeight,
                             kCVPixelFormatType_32BGRA, 
                             (void*)CFDataGetBytePtr(image), 
                             CGImageGetBytesPerRow(cgImage), 
                             NULL, 
                             0,
                             NULL, 
                             &pixelBuffer);

我还尝试了 kCVPixelFormatType_32AGRB 等,但没有帮助。

有什么想法吗?

I am taking a UIImage from Png file and feed it to the videoWriter.

avAdaptor appendPixelBuffer:pixelBuffer

When the end result video comes out, it seems to lacking the one color, missing the yellow color or something.

I take alook of the function that made the pixelbuffer out of the UIImage

CVPixelBufferCreateWithBytes(NULL,
                             myWidth,
                             myHeight,
                             kCVPixelFormatType_32BGRA, 
                             (void*)CFDataGetBytePtr(image), 
                             CGImageGetBytesPerRow(cgImage), 
                             NULL, 
                             0,
                             NULL, 
                             &pixelBuffer);

I also try the kCVPixelFormatType_32AGRB and others, it didn't help.

any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦魇绽荼蘼 2024-10-06 01:50:44

请验证您的 PNG 图像是否带有或不带有透明元素。如果您的 PNG 图像不包含透明度,那么它是每像素 24 位而不是 32 位。

另外,您尝试过 kCVPixelFormatType_32RGBA 吗?

Please verify if your PNG image is with or without transparency element. If your PNG image doesn't contain transparency then it's 24-bit and not 32-bit per pixel.

Also, have you tried kCVPixelFormatType_32RGBA ?

想挽留 2024-10-06 01:50:44

也许图像尺寸不适合在一起。

您的输入图像应具有与视频输出相同的宽度和高度。如果“myWidth”或“myHeight”与图像的大小不同(即不同的宽高比),则行尾可能会丢失一个字节,这可能会导致颜色偏移。 kCVPixelFormatType_32BGRA 似乎是首选(最快)的像素格式,所以这应该没问题。

RGB 色彩空间中没有黄色。这意味着黄色只是>红色<颜色。和>绿色<成分。似乎>蓝色<失踪了。

我假设您正在使用 CFDataRef (可能是 NSData)作为图像。如果它是 NSData 对象,您可以使用将字节打印到调试控制台

NSLog(@"data: %@", image); 

。这会将十六进制转储打印到控制台。在这里你可以看到你是否有 alpha 以及你的 png 是什么样的字节顺序。如果您的图像有 Alpha,则每四个字节应该是相同的数字。

Maybe the image sizes do not fit together.

Your input image should have the same width and height like the video output. If "myWidth" or "myHeight" is different (i.e. different aspect ratio) to the size of the image, one byte may be lost at the end of the line, which could lead to color shifting. kCVPixelFormatType_32BGRA seems to be the preferred (fastest) pixel format, so this should be okay.

There is no yellow color in RGB colorspace. This means yellow is only the >red< and >green< components. It seems that >blue< is missing.

I assume you are using a CFDataRef (maybe NSData) for the image. If it is an NSData object you can print the bytes to the debug console using

NSLog(@"data: %@", image); 

This will print a hex dump to the console. Here you can see if you have alpha and what kind of byte order your png is alike. If your image has alpha, every fourth byte should be the same number.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文