如何将RGB颜色转换为最接近的匹配8位颜色?

bod*_*ydo 12 algorithm rgb colors

我有一个应用程序索引视频中出现的前16种颜色.

我正在尝试编写另一个允许用户选择颜色的应用程序,然后应用程序找到该颜色出现的所有视频.

问题是因为我每个视频只索引16种颜色,所以用户选择RGB颜色.这种颜色被索引的概率非常低,因此我的应用程序几乎总是没有返回任何结果.

我想到了一种可以使这项工作的方法 - 我可以索引视频中出现的颜色并将它们转换为最接近的8位颜色.

然后当用户选择RGB颜色时,我可以将用户选择转换为相同的8位最接近的颜色.

这样我总会有比赛.

我现在唯一的主要问题是如何将RGB颜色转换为最接近的8位颜色?

Mar*_*som 8

要转换为Web安全调色板,您需要将每个r,g,b组件的范围从0-255转换为0-5并将它们组合:

color = (r*6/256)*36 + (g*6/256)*6 + (b*6/256)
Run Code Online (Sandbox Code Playgroud)


Tyl*_*den 6

您需要做的是将RGB转换为HSB(色调饱和度亮度)值.HSB是3字节,就像RGB一样,区别在于HSB值可以比RGB更容易比较.

您的下一步是决定"重要性"加权.例如,如果您关心的只是"颜色/色调",而不是饱和度或亮度,那么您可以丢弃S和B字节,只使用颜色字节.

如果是我和我被限制为8位,我会使用4位颜色信息(16种不同颜色),3位饱和度(8种不同值)和1位亮度信息(亮或暗).

本文介绍如何在Java中执行HSB:

http://java.sys-con.com/node/43559

本文的源代码在Java中具有RGB到HSB转换器.


Dav*_*ter 0

您熟悉Floyd\xe2\x80\x93Steinberg 抖动吗?这用于将高阶颜色转换为低阶颜色,例如,24 位 RGB 转换为 3 位(8 色)RGB 或将 RGB 图像限制为 8 位(256 色)以进行 GIF 转换。

\n\n

该算法在链接的维基百科页面上进行了描述。

\n