Извлечение цветовых компонентов в Lumia Imaging sdk — настраиваемый фильтр

Может ли кто-нибудь объяснить вычисление, используемое для извлечения компонентов цвета в правой части следующих утверждений с использованием операторов сдвига битов?

                uint alpha = (currentPixel & 0xff000000) >> 24; // alpha component

                uint red = (currentPixel & 0x00ff0000) >> 16; // red color component

                uint green = (currentPixel & 0x0000ff00) >> 8; // green color component

                uint blue = currentPixel & 0x000000ff; // blue color component

person erotavlas    schedule 03.04.2015    source источник


Ответы (1)


Lumia Imaging SDK предоставляет значение цвета, используя формат цвета ARGB. Он будет использовать 8 бит для кодирования каждого цветового компонента, но для простоты/эффективности он будет хранить и отображать все четыре из них в одном uint32.

Это означает, что каждый цветовой компонент «раскладывается» в int в том порядке, в котором вы его видели: 8 бит для альфа-канала, 8 бит для красного, 8 бит для зеленого и 8 бит для синего: ARGB.

Чтобы извлечь отдельные компоненты, вам нужно выполнить некоторые побитовые операции с int. Сначала вам нужно выполнить операцию и, чтобы выделить интересующие вас биты (using the & operator), затем вы делаете побитовый сдвиг вправо (the >> operator), чтобы получить нужные биты в диапазоне [0, 255].

person David Božjak    schedule 03.04.2015