yuv420p 转rgb计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yuv420p 转rgb计算相关的知识,希望对你有一定的参考价值。

参考技术A andorid 时间 compute shader链接: https://gitee.com/1392492818/compute_shader
YUV420p 格式如下

坐标计算方式:

相当于:
U和V的转换:

iOS 256 色 (VGA) 转 RGB

【中文标题】iOS 256 色 (VGA) 转 RGB【英文标题】:iOS 256 Colors (VGA) to RGB 【发布时间】:2011-01-29 10:33:38 【问题描述】:

我想在 iOS 上将 VGA 颜色(256 色;8 位)转换为 RGB 颜色。

是否可以计算这个或者我必须使用颜色表(使用 CGColorSpaceCreateIndexed)。

UIColor 不支持 256 色。

谢谢:)

【问题讨论】:

我冒昧地将“256 位”更改为“256 色”。 这个问题没有任何意义。 8 位颜色空间中的 VGA 颜色 RGB 颜色。它们由单独的红色、绿色和蓝色分量组成。最多有 256 种颜色这一事实无关紧要。您无需创建任何类型的颜色索引表或计算任何内容。 也许我应该详细说明。我正在将 DOS 游戏移植到 iOS。我得到一个 uint8 作为颜色(一个分量,8 位),需要将其转换为 RGB(三个分量)。 【参考方案1】:

在某个地方,您要移植的标题应该设置了调色板。在 VGA 上,256 种颜色通过程序员先前设置的表映射,以将它们转换为 18 位 RGB 颜色(每个通道统一为 6 位)。如果您通过仿真运行原始标题,请注意对端口 0x3c6、0x3c8 和 0x3c9 的写入或通过 int 10h 调用 BIOS,其中 ax = 0x1010(设置单一颜色)或 0x1012(设置范围)。如果你有原始代码,显然要寻找调色板表的来源。

在绘图方面,您可以自己保留调色板,例如作为 256 个 CGColorRefs 的 C 样式数组,或者按照您的建议使用 CGColorSpaceCreateIndexed(忽略 Apple 的轻微文档错误;颜色表最多可以包含 256 个条目,而不是最多 255)可能带有位图上下文,只需将缓冲区传递给 CoreGraphics 并忘记它。

我希望重新映射将在 CPU 上执行,因此如果成本太高,请考虑使用 GL ES 2.x 并编写合适的像素着色器 - 您可以将实际图像上传为亮度(即单通道)纹理,加上一个 256x1 纹理,其中每个点的颜色是一个调色板条目,然后编写一个着色器,从第一个纹理中读取当前纹理坐标,并使用该值来索引第二个。

【讨论】:

以上是关于yuv420p 转rgb计算的主要内容,如果未能解决你的问题,请参考以下文章

这个 YUV420P 到 RGB 着色器的转换从何而来?

如何将yuv420p数据旋转90

从 YUV420P 到 RGB 的 FFMPEG Api 转换产生奇怪的输出

AVFrame转换到Mat,yuv420p转换到RGB

视频学习笔记:Android OpenGL渲染YUV420P图像

从 QByteArray 创建一个适当的 cv::Mat,包含 YUV420p 帧