Манипуляции с массивом RGB

Допустим, у меня есть int[][] arrayA и int[][] arrayB. По любой заданной координате в этом массиве находится значение RGB. Что я хочу сделать, так это объединить значения RGB из arrayA и array2 в новый массив newArray, используя метод средневзвешенного значения.

Итак, что я делаю, так это извлекаю значения красного, зеленого и синего из каждого значения RGB следующим образом:

        curColA=RGB //suppose RGB is just the RGB in any given point

        int curRedA = (curCol >> 16) & 0xFF;

        int curGreenA = (curCol >> 8) & 0xFF;

        int curBlueA= curCol & 0xFF;

Я делаю то же самое для arrayB, и теперь я хочу их объединить. Вот где у меня проблемы. Мне просто сделать newRed=(curRedA+curRedB)/2 или есть какой-то другой способ сделать это?

arrayA values:  { { 0, 0x44, 0x5500, 0x660000 } };
arrayB values:  { { 2, 4, 6, 8 } };
newArray expected values: { 0, 0x44, 6, 0x660000 } };

person Snowman    schedule 06.10.2010    source источник


Ответы (1)


взвешенное среднее значение обычно делается примерно так:

newRed = (curRedA * redWeight + curRedB * (1 - redWeight));

... где redWeight находится в диапазоне [0, 1] и представляет собой вес (или смещение) в сторону красных значений в массиве 'A'. Он также представляет собой инверсию смещения в сторону красных значений в массиве «B».

person sje397    schedule 06.10.2010
comment
Чему равен redWeight? - person Snowman; 06.10.2010
comment
@fprime - я не уверен. Идея использования средневзвешенного значения, похоже, не соответствует вашему ожидаемому результату, как я это понимаю. - person sje397; 06.10.2010