Я согласен с тем, что битовое смещение более четкое и, возможно, более производительное.
Тем не менее, если вы хотите получить математический ответ из-за языковой поддержки (например, в электронной таблице), модуль%и trunc () или floor () упрощают:
Предполагая 8-битные значения для красного, зеленого и синего, конечно (0-255):
var rgbTotal = red * 65536 + green * 256 + blue;
var R = Math.trunc( rgbTotal / 65536 );
var G = Math.trunc( ( rgbTotal % 65536 ) / 256 );
var B = rgbTotal % 256;
Обсуждение: Указывая на ответ Сэма, значения RGB почти всегда имеют порядковый номер с прямым порядком, особенно на веб-страницах, в формате jpeg и png.Лично я думаю, что лучше умножить красный на 65536 вместо синего, если только вы не работаете с библиотекой, которая требует иного.
Чтобы вернуться к отдельным значениям:
- Для R просто разделите на 65536 и обрежьте остаток.
- Для G мы отбрасываем R через мод 65536, затем делим на 256, обрезая остаток (остаток - синий).
- Для B мы берем мод 256, который избавляется от двух старших байтов.
Для R & G число должно быть обрезано, чтобы отброситьостаток, специфичный для языка, в основном мы хотим целое число.В javascript Math.trunc () является простым способом, и Math.floor () также работает.Это не нужно для B , поскольку это остаток от модуля - однако это также предполагает, что нам не нужна проверка ошибок, например, из пользовательского ввода, т.е. значение для B всегда является целым числом 0-255,