Цитата Сообщение от moroz1999 Посмотреть сообщение
Я уже несколько раз этот вопрос поднимал, но моего знания матчасти не хватает.
Имхо, в этой формуле расчета что-то неверно:
real_Red = (Red*R11 + Green*R12 + Blue*R13) / 0x100
Думаю, правильно так:
real_Red = (Red*R11 + Green*R12 + Blue*R13) / (R11+R12+R13)
real_Green = (Red*R21 + Green*R22 + Blue*R23) / (R21+R22+R23)
real_Blue = (Red*R31 + Green*R32 + Blue*R33) / (R31+R32+R33)
По идее, это как раз простое смешивание цветов.
Коэффициенты матрицы нормированы.
Переполнения не будет ни при каких входных RGB.
Потери точности тоже не будет.
С математической точки зрения - все отлично.

Что и показано на частном случае здесь:
Цитата Сообщение от pulsar Посмотреть сообщение
color_x=(#ff*xr+#ff*xg+#ff*xb)/#2fd
Но если pulsar имел в виду

real_Red' = (Red*R11 + Green*R12 + Blue*R13) / (#FF+#FF+#FF)

то это неправильно. Переполнения конечно не будет, но мы получим "ослабление" цвета.
Например, real_Red' = (#FF*#FF + 0 + 0) / #2FD = #55.

А чтобы формула стала совсем идеальной, можно перед делением к числителю добавить половину знаменателя, то есть округлить результат по правилам математики.

Итого:
Sr = (R11+R12+R13);
real_Red = (Red*R11 + Green*R12 + Blue*R13 + Sr/2) / Sr;
Sg = (R21+R22+R23);
real_Green = (Red*R21 + Green*R22 + Blue*R23 + Sg/2) / Sg;
Sb = (R31+R32+R33);
real_Blue = (Red*R31 + Green*R32 + Blue*R33 + Sb/2) / Sb;
Что касается оригинальной формулы:
Цитата Сообщение от pulsar Посмотреть сообщение
правда еще раз повторюсь я хз зачем smt написал формулу именно так, может это была не ошибка? хотя, все же, скорее всего ошибка...
Возможно, он все-таки нормировал коэффициенты матрицы перед использованием, просто в комментах этого не указал.
Например, так:
R11 = R11*#100/(R11+R12+R13)

На это сможет ответить тот, кто разбирался в исходниках.