Если цвет представлен в 32 битах, как кажется в вашем примере, похоже, что он закодирован альфа-каналом и тремя цветовыми каналами, каждый из которых состоит из восьми битов (наиболее вероятно, ARGB).
Shifting >> 24
, таким образом, устраняются компоненты RGB и сохраняются альфа-каналы в младших битах.
Но остерегайтесь подписанной арифметики! если исходная строка имеет отрицательное число, то fillColorValue
будет отрицательным и останется отрицательным после арифметики >>
shift ...
С защитой на alpha > 0
следствием является то, что все отрицательные или нулевые альфа-значения будут считаться непрозрачными.
Это означает, что между 128 и 255 не будет значения alpha
, поэтому в открытом интервале значение opacity
не будет] 0,5,1,0 [.
Звучит странно. Может быть, это и есть истинное намерение ... Или, может быть, цвет должен был быть интерпретирован без знака при печати в строку?
Или, может быть, в альфа-канале 9 битов, но тогда это будет очень необычный формат, и я не вижу смысла тратить половину возможных значений для кодирования одного значения непрозрачности ... Это не делает здравый смысл.