Я ищу алгоритм для расчета второго цвета, используя формулу смешивания цветов - PullRequest
0 голосов
/ 18 марта 2020

Ну, я воспользовался поиском, чтобы найти ответ на свой вопрос, но он не получил результат, который я искал, поэтому я попробую задать его здесь:

Если я знаю формулу для смешивания цветов:

resultColorRGB = [round(firstColorR * alpha + secondColorR * (1 - alpha))], [round(firstColorG * alpha + secondColorG * (1 - alpha))], [round(firstColorB * alpha + secondColorB * (1 - alpha))]

, где alpha ∈ [0..1] .

Тогда как мне найти второй цвет, если я знаю первый цвет и цвет результата?

Например: round (35 * alpha + 255 * (1 - alpha)) = 204, round (alpha * 15 + 0 * (1 - alpha)) = 3 round (альфа * 0 + 153 * (1 - альфа)) = 118, альфа = 0,23

Я не могу использовать метод для решения системы линейных уравнений по двум причинам (насколько я понимаю): альфа не является целым числом, а результат вычисляется округлением.

Но я уверен, что существует некоторый способ оценки приблизительного расчета без использования итерации.

1 Ответ

0 голосов
/ 18 марта 2020

Если все значения были точными, то у вас есть уравнение aA + (1-a) B = C, где A и B - два ваших входных цвета, a - альфа, а C - выходной цвет. Каждый из A, B и C представляет собой тройку красного, зеленого и синего, но это не имеет значения для математики; к каждому из них можно обращаться независимо.

Если у вас есть A и C, и альфа-значение a, то у вас B = (C -aA) / (1-a). Тот факт, что это неточно, на самом деле не имеет значения; Вы можете точно вычислить эти значения, а затем округлить. Вы не можете получить B обратно точно, так как информация теряется в исходном микшировании.

...