Преобразование из RGB в HSV - это интересный шаг, который вы можете попробовать позже. Я представляю, что вы хотите визуализировать то, что выглядит как непрерывный градиент цвета:

Я прав? Если вам нужно отобразить сотни цветов, но у вас есть только 14 цветов, вам нужно смешать смежные цвета, что называется «интерполяция».
Мы собираемся попробовать "линейную интерполяцию", потому что это просто. Вы можете попробовать «бикубическую интерполяцию» позже.
Допустим, вы собираетесь визуализировать одну из цветных вертикальных линий в градиенте выше. Сначала нужно определить, какого цвета это должно быть. Допустим, горизонтальное положение вертикальной линии может быть между 0 и 99.
Затем вам нужно найти, какие два из ваших 14 цветов смешиваются между:
float x = horizontal_position * 13.f / 99.f;
int a = floorf(x);
int b = std::min( 13, a + 1 );
Теперь вам нужно смешать два цвета, чтобы найти цвет вертикальной линии:
float blend = x - a;
color result = palette[a] * (1-blend) + palette[b] * blend;
«Цвет» в псевдокоде выше может быть RGB, YUV, HSV и т. Д. Эта часть зависит от вас. Помните, что HSV является «нелинейным цветовым пространством», и поэтому линейное смешение двух цветов HSV может привести к неожиданным результатам.