Эта проблема состоит из двух частей.
Учитывая два цвета A и B и некоторый процент p, определите, какой цвет лежит p в «процентах пути» от A до B.
Для заданной точки на плоскости найдите ортогональную проекцию этой точки на данную линию.
Данная строка в части 2 является вашей градиентной линией. Для любой точки P спроецируйте ее на градиентную линию. Допустим, его проекция равна R. Затем выясните, как далеко R от начальной точки вашего градиентного сегмента, в процентах от длины градиентного сегмента. Используйте этот процент в вашей функции из части 1 выше. Вот такого должен быть цвет P.
Обратите внимание, что вопреки тому, что говорили другие люди, вы не можете просто рассматривать свои цвета как обычные числа в своей функции из части 1. Это почти наверняка не даст того, что вы хотите. То, что вы делаете, зависит от используемого вами цветового пространства. Если вам нужен градиент RGB, то вам нужно рассмотреть компоненты красного, зеленого и синего цветов отдельно.
Например, если вам нужен цвет "на полпути между" чисто красным и синим, то в шестнадцатеричной записи вы имеете дело с
ff 00 00
и
00 00 и далее
Возможно, нужный вам цвет - это что-то вроде
80 00 80
это хороший фиолетовый цвет. Вы должны усреднить каждый компонент цвета отдельно. Если вы попытаетесь просто усреднить шестнадцатеричные числа 0xff0000 и 0x0000ff напрямую, вы получите 0x7F807F, который имеет средний серый цвет. Я предполагаю, что это объясняет, по крайней мере, часть проблемы с изображением выше.
В качестве альтернативы, если вы находитесь в цветовом пространстве HSV, вы можете настроить только компонент оттенка и оставить остальные как есть.