Не совсем. Вам нужно использовать битовое смещение, а не простое умножение.
Каждое значение в вашей цветовой карте имеет длину 8 байт, верно? Таким образом, чтобы результирующее число было уникальным, оно должно связать их все вместе, в общей сложности 8 * 4 = 32 бита. Посмотрите на следующее:
Вы хотите взять:
AAAAAAAA
RRRRRRRR
GGGGGGGG
BBBBBBBB
и сделайте так:
AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
Это означает, что вы должны добавить следующее:
AAAAAAAA000000000000000000000000
RRRRRRRR0000000000000000
GGGGGGGG00000000
BBBBBBBB
--------------------------------
AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
Мы выполняем это, сдвигая бит влево. Взяв A
и сдвинув 24 бита влево, вы получите AAAAAAAA
, а затем 24 0
бит, как мы и хотим. Следуя этой логике, вы захотите сделать:
sum = A << 24 + R << 16 + G << 8 + B;
Чтобы проиллюстрировать, почему то, что вы предлагаете (с использованием умножения), не работает, то, что вы предлагаете, приводит к следующим двоичным числам, которые вы можете увидеть как перекрывающиеся:
255 * 1 = 0011111111
255 * 2 = 0111111110
255 * 3 = 1011111101
255 * 4 = 1111111100
Кроме того, простое добавление значений A, R, G, B к полученному числу всегда будет постоянным. Упрощая вашу математику выше, мы получаем:
4 * 255 + A + 3 * 255 + R + 2 * 255 + G + 1 * 255 + B
255 * (4 + 3 + 2 + 1) + A + R + G + B
255 * (10) + A + R + G + B
2550 + A + R + G + B
К сожалению.