В RGB у вас есть 8 бит для красного, 8 бит для зеленого и 8 бит для синего. Вы храните 3 байта в int, который имеет 4 байта следующим образом:
- Биты от 0-7 (наименее значимые) для Blue.
- Биты с 8-15 (наименее значимые) для Грина.
- Биты с 16 по 23 (наименее значимые) для красных.
Чтобы извлечь их в отдельные значения, вам нужно сдвинуть вправо правильное количество битов, чтобы поместить байт, соответствующий цвету, который вы хотите извлечь, в младший байт целого числа, а затем поместить оставшуюся часть целого числа. в 0, чтобы позволить только это значение байта. Последняя часть выполняется с помощью операции AND с маской 0xFF. AND оставляет единственный байт целого, где он применяется, с тем же значением, оставляя остальные байты в 0.
Вот что происходит:
var color:uint = myObject.color;
У вас есть такая переменная цвета: 0x00RRGGBB
var red:uint = color >>> 16;
Сдвиг вправо 16-битного цвета приводит к: 0x000000RR, что приводит к значению красного цвета.
Но для:
var green:uint = color >>> 8 & 0xFF;
После сдвига вправо цвета 8 битов он оставляет этот результат 0x0000RRGG, но здесь нам нужны только биты GG, поэтому мы применяем операцию И с маской 0xFF или, чтобы быть более ясной, 0x000000FF, поскольку вы знаете, что И оставляет старые Значения битов, где маска равна 1, и нули там, где маска равна 0, поэтому результат выполнения 0x0000RRGG & 0x000000FF = 0x000000GG
, который является значением для зеленого. То же самое применяется для извлечения значения синего цвета.