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