Me parece que tomaron el mismo tono (color básico) y subieron y bajaron el brillo. Eso se puede hacer con la suficiente facilidad con transformaciones HSL o HSV. Consulte en Wikipedia los espacios de color HSL y HSV para obtener una cierta comprensión de la teoría involucrada.
Idea básica: las computadoras representan el color con una mezcla de intensidad roja, intensidad verde e intensidad azul, llamada RGB, porque esa es la manera en que la pantalla muestra el color. HSL (Hue, Saturation, Lightness) y HSV (Hue, Saturation, Value) son dos modelos alternativos para representar el color que son más intuitivos y más cercanos a la forma en que los seres humanos tienden a pensar sobre cómo se ven los colores.
El tono es el color básico, representado (más o menos) como un ángulo en una rueda de color. La saturación es un valor lineal, de 0 (gris) a 255 (color brillante y vibrante). Y la luminosidad/valor representa el brillo, de 0 (negro) a 100 (blanco).
Los algoritmos para transformar de RGB -> HSL y HSL -> RGB (o HSV en lugar de HSL) son bastante sencillos. Intente transformar su color en HS *, ajuste el brillo y vuelva a transformarse. Tomando varios valores de brillo diferentes de menor a mayor, y organizándolos como cuñas en un gráfico circular, puede duplicar esa imagen con bastante facilidad.
Gracias Mason, como usted sugiere, que mantiene constante el SA y hacer que la L varía. Obtuve el resultado que quería. Gracias mghie también por el enlace. Usé el algoritmo de efg para convertir hsv a rgb. – Rick
Gran respuesta. Además, verifique la unidad GraphUtil en el VCL: ColorAdjustLuma y otras funciones. –
Y ColorRGBToHLS y su inverso en la misma unidad. –