Ich habe in den Dokumenten nach einem HsbToRgb-Konverter gesucht, aber nichts gefunden, das "hsb" oder "hsl" enthält, also schätze ich, dass es einfach nicht existiert. Nur um sicher zu gehen, gibt es irgendwelche Klassen, die diese Konvertierung unterstützen?Verfügt das .NET Framework 3.5 über einen HsbToRgb-Konverter oder muss ich selbst einen Rollout durchführen?
aktualisieren
landete ich mit diesem gehen, die als 0xA3 ist etwas anders. Ich fügte auch eine AhsbToArgb
hinzu, also kann ich in RGB umwandeln und den Alphakanal in einer Aufnahme einstellen.
AhsbToArgb
- ermöglicht alpha channel:
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
- konvertiert Farbton-Sättigung-Helligkeit zu rot-grün-blau:
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
- verdoppelt ints umwandelt und gibt eine Farb Objekt:
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));
}
tun die Fische: http: //en.wikipedia. org/wiki/HSL_and_HSV –