Calcular as cores de início e final de um gradiente com um gradiente, dada uma cor base
Pergunta
Eu tenho um aplicativo WTL C ++ e quero que o usuário seja capaz de selecionar cores diferentes para alguns dos elementos da interface do usuário e aplicar um preenchimento de gradiente usando o GradientFill
Chamada da API. No entanto, em vez de deixar o usuário escolher as cores de início e final para o gradiente, gostaria que eles pudessem selecionar uma cor 'base' e para que meu aplicativo calcule as cores de partida/final adequadas automaticamente. Quero acabar com um preenchimento semelhante ao que o Windows usa para vários elementos temáticos. A cor base pode ser a cor 'do meio' do gradiente, com minha aplicação de alguma forma calculando uma cor um pouco mais clara para o início do gradiente e uma cor um pouco mais escura para a extremidade do gradiente. Como alternativa, eu poderia usar a base como a cor inicial e calcular o final ou vice-versa.
Tenho certeza de que isso seria relativamente fácil com alguma macro mágica RGB, mas eu realmente não sei por onde começar. Alguma idéia seria bem-vinda.
Solução
O espaço de cores RGB não é adequado para isso. Usar HSL ou HSV, é fácil gerar automaticamente um gradiente de boa aparência, variando um componente individual. Converter de hsl/v para um trigêmeo RGB que você pode usar na API é simples.