Конвертировать RGB в 8 бит - PullRequest
       24

Конвертировать RGB в 8 бит

0 голосов
/ 24 декабря 2018

Итак, я создаю графический генератор Bash PS1 с использованием Javascript.Пользователь может выбрать любой цвет из палитры (библиотека jscolor) для любого элемента, который он хочет.Значение, которое я получаю, представляет RGB-репрезентацию этого цвета.Я хотел бы преобразовать это значение в число от 0 до 255, чтобы оно могло быть представлено в Bash.

Пример:

Вход: # 000000

Выход: 0

Вход: # FFFFFF

Выход: 255

Любой другой ввод преобразуется в ближайшее 8-битное представление

** Я проверил это post , но ответы не совсем работают (я получаю вывод 215 для ввода #FFFFFF).

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Вы получаете вывод 215 для 0xFFFFFF из-за используемой палитры.

Так называемая "безопасная для сети" палитра содержит 216 (6 ^ 3) цветов, сформированных с оценками компонентов (ir * 255/5, ig * 255/5, ib * 255/5) для воздействий ir,ig,ib = 0..5 и 40 дополнительных цветов, таких как «зеленый деньги» или «нежный лосось».

Таким образом, индекс 215 такой палитры действительно содержит 0xFFFFFF RGB.

0 голосов
/ 24 декабря 2018

Вот (плохая) идея:

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 уникальных цвета.

...