Необходимо из int rgba, в котором содержится цвет в формате rgba вытащить в отдельные переменные все цвета и значение канала альфа
На вход дается int rgba, в котором хранится цвет в формате rgba. Нужно в отдельных методах вытащить по отдельности все цвета и значение параметра альфа. И ровно наоборот, из 4 различных int собрать полностью цвет в rgba.
Я понимаю, что нужно это делать через битовые операции, но я не до конца уверен. Мне кажется это должно выглядеть как-то так:
- Альфа:
return (rgba & 0xFF) - Синий цвет :
return ((rgba & 0xFF00) >> 8 - Зеленый цвет:
return ((rgba & 0xFF0000) >> 16 - Красный цвет:
return ((rgba & 0xFF000000) >> 24
А чтобы собрать rgba обратно:
rgba = 0;
rgba = (red << 24) | (green << 16) | (blue << 8) | (alpha)
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
В целом всё нормально, только для вычисления красного цвета имеет смысл воспользоваться беззнаковым сдвигом >>>:
static int red(int rgba) {
return (rgba & 0xFF000000) >>> 24;
}
static int red_signed(int rgba) {
return (rgba & 0xFF000000) >> 24;
}
Сравнение результатов для rgba = 0xFABBCC33;:
System.out.println(Integer.toHexString(rgba) + " -> unsign red: " + Integer.toHexString(red(rgba)));
System.out.println(Integer.toHexString(rgba) + " -> signed red: " + Integer.toHexString(red_signed(rgba)));
Output:
fabbcc33 -> unsign red: fa
fabbcc33 -> signed red: fffffffa
