В простейшем случае вам нужна линейная интерполяция между 5 точками в 3d. Прямой градиент цвета между двумя цветами {r1, g1, b1} и {r2, g2, b2}, как если бы вы пошли на линию в 3d, которая соединяет точки {r1, g1, b1} и {r2, g2, Би 2}.
Когда ваши значения серого находятся в интервале [0,1], тогда вы захотите иметь цвет {r1, g1, b1}, если у вас уровень серого 0 и {r2, g2, b2}, если у вас есть уровень серого 1. Вопрос в том, как рассчитать цвета между ними:
вспомните простой школьный векторный анализ. c1 - точка {r1, g1, b1}, c2 - {r2, g2, b2}. Начните с c1 и двигайтесь в направлении вектора c2-c1:
outColor = c1 + серый * (c2-c1)
или эквивалентно
outColor = (1-серый) c1 + серый c2
Ременбер, серый должен лежать в интервале [0,1]. В противном случае вы должны изменить его масштаб. Это простая линейная интерполяция между двумя точками, которая, конечно, может быть расширена на любое количество цветов.
Для пяти цветов подход в основном одинаков. Здесь для 5 случайно выбранных цветов:
{{0.273372, 0.112407, 0.0415183},
{0.79436, 0.696305, 0.167884},
{0.235083, 0.999163, 0.848291},
{0.295492, 0.780062, 0.246481},
{0.584883, 0.460118, 0.940826}}
![enter image description here](https://i.stack.imgur.com/rASZV.png)
Две важные вещи, которые вы должны знать:
Если вы хотите получить цвет для заданного значения серого, вам сначала нужно извлечь две окружающие точки RGB. Например, если вы хотите иметь цвет для серого = 0,1, это будет первая и вторая точки rgb.
Вы должны изменить масштаб значения серого цвета в соответствии с количеством цветов, которые вы используете в градиенте. Посмотрите на изображение с 5 цветами, у вас есть 4 разных двухточечных интервала интерполяции . Если вы хотите, чтобы вышеупомянутая формула цвета работала, вам необходимо изменить масштаб вашего значения серого для каждого цветового интервала до [0,1].
Примечание: Это, конечно, не решение для реализации в C #, но ваш вопрос предположил, что создание цветного изображения того же размера не было вашей проблемой. Вычисление значений цвета для каждого значения серого является ключом для вашей раскрашивания.