我想在iOS上将VGA颜色(256色; 8位)转换为RGB颜色。
是否可以计算或使用颜色表(使用CGColorSpaceCreateIndexed)。
UIColor不支持256色。
谢谢:)
答案 0 :(得分: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纹理,其中每个点的颜色是一个调色板条目,然后写一个着色器,从当前纹理坐标的第一个纹理读取并使用该值来索引第二个。