Calcular as cores de início e final de um gradiente com um gradiente, dada uma cor base

StackOverflow https://stackoverflow.com/questions/2164635

  •  24-09-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top