将RGB转换为8位

时间:2018-12-24 19:54:23

标签: bash algorithm colors rgb

因此,我正在使用Javascript创建图形化的Bash PS1 Generator。用户可以从调色板(jscolor库)中为他们想要的任何元素选择任何颜色。我得到的值是该颜色的RGB表示。我想将该值转换为0-255之间的数字,以便可以用Bash表示。

示例:

输入:#000000

输出:0

输入:#FFFFFF

输出:255

任何其他输入都转换为最接近的8位表示形式

**我检查了此post,但答案却不太奏效(输入#FFFFFF的输出为215)。

2 个答案:

答案 0 :(得分:1)

由于使用了调色板,您将获得0xFFFFFF的输出215。

所谓的“网络安全”调色板包含216种(6 ^ 3)颜色,其中成分等级(ir * 255/5, ig * 255/5, ib * 255/5)用于冲击ir,ig,ib = 0..5,另外还有40种颜色,例如“金钱绿色”或“嫩鲑鱼” ”。

因此,此类调色板的索引215实际上包含0xFFFFFF RGB。

答案 1 :(得分:0)

这是一个(不好的)主意:

let rgb24=0x99FFBB
let r2="($rgb24 >> 16) >> 6"
echo "$r2"
let g2="(($rgb24 >> 8) % 256) >> 6"
echo "$g2"
let b2="($rgb24 % 256) >> 6"
echo "$b2"

let rgb8="($r2 << 4) + ($g2 << 2) + $b2"

printf "%x\n" $rgb24
printf "%x\n" $rgb8

因此,现在每种颜色都有两种颜色强度:红色,绿色和蓝色。

如何显示这种东西取决于您自己。最简单的操作是将每种成分的颜色位移6,然后重建原始的24位颜色值。每种颜色总共有四种不同的强度,或64种独特的颜色。