Ну, мне кажется, что ваша длина волны - это оттенки, а ваша интенсивность - это еще одно слово для яркости.Получение правильных цветов было бы действительно простой задачей, если бы у вас была модель, представляющая цвета в плане оттенка и яркости и способ преобразования между ним и RGB ...: -)
Отображение цветов на самом деле очень просто.Вы можете использовать стандартный компонент TImage на форме.Как только вы определите, какое значение TColor идет в определенной позиции, вы можете установить его с помощью
image.Canvas.Pixels[x, y] := aColor;
EDIT : Как отобразить длину волны на оттенок:
Это немного сложно, так как левая сторона вашего спектра кажется фиолетовой, а красный - справа.В HSL красный находится в позиции 0.Вам нужно будет инвертировать ось X, чтобы красный был равен 0, а фиолетовый - высок.Вы можете получить это, просто сказав value := MAX_VALUE - value;
Затем вам нужно откалибровать линию.Установите длину волны, соответствующую полному красному цвету, равному 0, а дальний синий конец - тому, что соответствует его соответствующему оттенку.(Если вы можете преобразовать длину волны в TColor, а затем из TColor в HSL, который не составит труда вычислить.) Это ваш диапазон, и вам нужно нормализовать все длины волн, чтобы он соответствовал этому диапазону.
ПростоГлядя на это, мне кажется, что левый конец вашего примера спектра имеет цветовой оттенок около 270 градусов, что соответствует 192 по шкале от 0 до 255.Поэтому возьмите свой спектр с красного на синий - опять же, помните, что красный - это НИЗКИЙ, а не ВЫСОКИЙ - и нормализуйте его до диапазона 0-1-192 (или независимо от фактического высокого значения), и вы получите значение H.
Кроме того, если у вас есть несколько цветов на правом конце вашей цветовой линии, которые немного выходят за пределы полного красного в сторону фиолетового, то у вас будет отрицательный оттенок, который возвращается к 255.