Используйте этот метод для инвертирования каждого цвета и сохранения оригинальной альфы.
int invert(int color) {
return color^0x00ffffff;
}
XOR (^
) с 0 возвращает исходное значение без изменений. xor с 0xff
переворачивает биты. поэтому в приведенном выше случае мы имеем 0xaarrggbb
, которые мы переворачиваем/инвертируем r, g и b.
Это должен быть самый эффективный способ инвертировать цвет. арифметика (незначительно) медленнее, чем эта совершенно простая побитовая манипуляция.
, если вы хотите игнорировать оригинальный альфа, и просто сделать его непрозрачным, вы можете перезаписать альфа:
int invert(int color) {
0xff000000 | ~color;
}
в этом случае мы просто переверните каждый бит цвета, чтобы инвертировать каждый канал, включая альфа, а затем замените альфа-канал на непрозрачный, заставив первые 8 бит высотой с 0xff000000
.
0xFF00FF - всего 3 байта или 24 бит, а не 32 бит. –
Меня интересуют только цвета, поэтому оставшийся байт не имеет значения и, следовательно, опущен. Спасибо за downvoting. – skrat