Из того, что я могу сказать из рассмотрения созданных вариантов на этой домашней странице, кажется, что недостаточно просто отдельно изменять значения HSL для создания вариантов.
В самом деле? Интерфейс кажется достаточно понятным о том, какие изменения он вносит. Вы можете выбрать «оттенок», «насыщенность» или «яркость», и он показывает 9 вариаций на этом канале. Следующий скрипт MATLAB будет отображать различные варианты аналогичным образом (хотя в цветовом пространстве HSV, а не HSL).
% display n variations of HTML-style color code.
function [] = colorwheel ( hex, n )
% parse color code.
rgb = hex2rgb(hex);
% render all variations.
h = figure();
for j = 1 : 3,
% build n variations on current channel.
colors = variantsof(rgb, j, n);
% display variations.
for i = 1 : n,
% generate patch of specified color.
I = zeros(128, 128, 3);
I(:,:,1) = colors(i, 1);
I(:,:,2) = colors(i, 2);
I(:,:,3) = colors(i, 3);
% render patches side-by-side to show progression.
imshow(I, 'parent', ...
subplot(3, n, (j-1)*n+i, 'parent', h));
end
end
end
% parse HTML-style color code.
function [ rgb ] = hex2rgb ( hex )
r = double(hex2dec(hex(1:2))) / 255;
g = double(hex2dec(hex(3:4))) / 255;
b = double(hex2dec(hex(5:6))) / 255;
rgb = [r g b];
end
% generate n variants of color on j-th channel.
function [ colors ] = variantsof ( rgb, j, n )
colors = zeros(n, 3);
for i = 1 : n,
% convert to HSV.
color = rgb2hsv(rgb);
% apply variation to selected channel.
color(j) = color(j) + ((i-1) / n);
if color(j) > 1.0,
color(j) = color(j) - 1.0;
end
% convert to RGB.
colors(i,:) = hsv2rgb(color);
end
% order colors with respect to channel.
if j > 1,
colors = sortrows(colors, j);
end
end
Используя образец цвета "золотарник", как:
colorwheel('daa520', 9);
Я получаю:
Первый ряд - это изменение оттенка, второй - по насыщенности, а третий - по значению. Выходные данные не точно соответствуют на coloreminder.com , но это объясняется разницей в цветовом пространстве и точном значении, используемом в перестановках.