1

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

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

UIColor 不支持 256 色。

谢谢 :)

4

1 回答 1

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 纹理,其中每个点的颜色是一个调色板条目,然后编写一个着色器,从第一个纹理读取当前纹理坐标并使用该值来索引第二个。

于 2011-01-29T15:15:56.830 回答