J'ai fait une recherche pour un convertisseur HsbToRgb dans les docs mais je n'ai rien trouvé contenant "hsb" ou "hsl", donc je devine que ça n'existe pas. Juste pour s'assurer, cependant, y a-t-il des classes qui soutiennent cette conversion?.NET Framework 3.5 dispose-t-il d'un convertisseur HsbToRgb ou dois-je lancer le mien?
Mise à jour
Je fini par aller avec ce qui est légèrement différent de celui 0xA3 de. J'ai également ajouté un AhsbToArgb
afin que je puisse convertir en RVB et définir le canal alpha en une seule fois.
AhsbToArgb
- permet un canal alpha:
public static Color AhsbToArgb(byte a, double h, double s, double b)
{
var color = HsbToRgb(h, s, b);
return Color.FromArgb(a, color.R, color.G, color.B);
}
HsbToRgb
- convertit la teinte-saturation-luminosité au rouge-vert-bleu:
public static Color HsbToRgb(double h, double s, double b)
{
if (s == 0)
return RawRgbToRgb(b, b, b);
else
{
var sector = h/60;
var sectorNumber = (int)Math.Truncate(sector);
var sectorFraction = sector - sectorNumber;
var b1 = b * (1 - s);
var b2 = b * (1 - s * sectorFraction);
var b3 = b * (1 - s * (1 - sectorFraction));
switch (sectorNumber)
{
case 0:
return RawRgbToRgb(b, b3, b1);
case 1:
return RawRgbToRgb(b2, b, b1);
case 2:
return RawRgbToRgb(b1, b, b3);
case 3:
return RawRgbToRgb(b1, b2, b);
case 4:
return RawRgbToRgb(b3, b1, b);
case 5:
return RawRgbToRgb(b, b1, b2);
default:
throw new ArgumentException("Hue must be between 0 and 360");
}
}
}
RawRgbToRgb
- convertit doubles à ints et renvoie une couleur objet:
private static Color RawRgbToRgb(double rawR, double rawG, double rawB)
{
return Color.FromArgb(
(int)Math.Round(rawR * 255),
(int)Math.Round(rawG * 255),
(int)Math.Round(rawB * 255));
}
Faire le poisson: http: //en.wikipedia. org/wiki/HSL_and_HSV –