Вот предложение по оптимизации, которое применяется на любом языке и не наносит ущерба читаемости.
Вместо этого:
b = (n & 0xff0000) >> 16
g = (n & 0xff00) >> 8
r = (n & 0xff)
используйте это:
b = (n >> 16) & 0xff
g = (n >> 8) & 0xff
r = n & 0xff
Две причины:
Меньшее число констант не медленнее и может быть быстрее.
Наличие меньших констант не медленнее и может быть быстрее - на языке, подобном C, может быть доступна более короткая машинная инструкция; в языке, подобном Python, реализация, вероятно, объединяет маленькие целые числа.