我正在将 SVGA 驱动的 GUI 软件升级到 Qt 驱动的软件。问题之一是进行颜色转换。由于 SVGA 使用 256 颜色模型,而 Qt 使用 RGB 颜色模型(实际上它也支持其他模型;但我使用的是 RGB)。因此我需要将 256 颜色线性映射到等效的 RGB 颜色。
有什么公式可以做到这一点吗?
注意:我使用 C/C++ 作为我的构建语言。
你需要弄清楚正在使用什么调色板。这应该在应用程序中进行编码。调色板是 256 个 RGB 值的数组。要使用颜色,请使用数组索引(单个字节)。一旦你有了调色板信息,你就拥有了你所追求的线性映射。
VGA 模式中有一个默认调色板。大多数程序都会自己设置,但无论哪种方式,调色板信息都驻留在显卡上。您应该可以查询它,但我无法帮助您。我最后一次编写任何代码来执行此操作是在大约 15 年前,当时我们都知道要为各种图形操作写入哪些内存地址。
找出调色板的另一种方法:如果您能够修改该应用程序以写入一堆像素,只需绘制一个包含所有 256 个颜色值的 16x16 块,获取屏幕截图,然后从中恢复调色板。