Речь идет о выделении RGB из значения в пикселях. Вот фрагмент кода:
Byte a = (Byte)(myColor >> 24);
// Prevent division by zero
UInt32 ai = a;
if (ai == 0)
{
ai = 1;
}
ai = ((255 << 8) / ai);
Byte bA = a;
Byte bR = (Byte)((((myColor >> 16) & 0xFF) * ai) >> 8);
Byte bG = (Byte)((((myColor >> 8) & 0xFF) * ai) >> 8);
Byte bB = (Byte)((((myColor & 0xFF) * ai) >> 8));
Я технически понимаю, то есть на уровне битов, и в двоичном, что происходит. Я, в частности, понимаю части 'Byte b # = (Byte) ((((myColor >> n) & 0xFF)'. Чего я не понимаю, так это предварительного умножения (здесь я имею в виду реализацию, а не теорию). хочу понять - и так на мои вопросы:
- Почему 255 смещается на 8 бит вправо, а затем делится на альфа?
- Почему каждое значение умножается на результат этого, а затем сдвигается на 8 бит влево?