Я не знаю точного ответа на ваш вопрос (я даже не уверен, что понимаю сам вопрос), но я сделаю снимок.
Похоже, вы пытаетесь вычислить значение RGB, которое вы видите, когда что-то еще (браузер?) Смешивает непрозрачный холст поверх непрозрачного фона. (Вы уверены, что это правильно делать?)
Во-первых, пожалуйста, не используйте parseInt
для округления числа. Он используется для разбора строк , и вы должны использовать его для преобразования huePixel [i] в целое число: parseInt(huePixel[i], 10)
(обратите внимание, что я явно указываю основание, чтобы избежать синтаксического анализа чисел как восьмеричных).
Для округления значений следует использовать методы Math
: Math.round
(до ближайшего целого числа), Math.ceil
(округление вверх) или Math.floor
(округление вниз).
Возможно, ваша проблема вызвана ошибками округления (трудно сказать без конкретных входных данных и ожидаемых выходных данных расчета). Чтобы минимизировать ошибки округления, вы можете попробовать переписать формулу следующим образом:
(opacity * svPixel[0]) + ((1-opacity) * huePixel[1]) =
huePixel[1] + opacity * (svPixel[0]-huePixel[1]) =
huePixel[1] + svPixel[3] * (svPixel[0]-huePixel[1]) / 255