2013-05-02 73 views
0

我正在将一个SVGA驱动的GUI软件升级到Qt驱动的软件。其中一个问题是做颜色转换。 由于SVGA使用256色模型,而Qt使用RGB色彩模型(实际上它也支持其他模型;但是我使用的是RGB)。因此,我需要256色到等效RGB色彩的线性映射。如何将256色转换为最接近的匹配RGB颜色?

有没有公式可以做到这一点?

注意:我使用C/C++作为构建语言。

回答

1

您需要计算出正在使用的调色板。这应该在应用程序中进行编码。调色板是256个RGB值的数组。要使用颜色,请使用数组索引(单个字节)。一旦获得了调色板信息,就可以获得您之后的线性映射。

在VGA模式下有一个默认调色板。大多数程序会自行设置,但无论哪种方式,调色板信息都驻留在显卡上。你应该能够查询它,但我无法帮助你。我最后一次编写任何代码来做这件事大约是在15年前,当时我们都知道要写入各种图形操作的内存地址。

另一种方法来找出调色板:如果你能够修改应用程序编写的一组像素,简单地划一个包含所有256个色值的16×16块,得到的截图,然后恢复从调色板。