Dokümanlardaki bir HsbToRgb dönüştürücüsü için arama yaptım, ancak "hsb" veya "hsl" içeren bir şey bulamadım, bu yüzden var olmadığını tahmin ediyorum. Ancak, emin olmak için, bu dönüşümü destekleyen herhangi bir sınıf var mı?.NET Framework 3.5 bir HsbToRgb dönüştürücüsüne sahip mi, yoksa kendi başıma mı dönmem gerekiyor?
Güncelleme
Ben 0xA3 en biraz daha farklı olan varmaya sona erdi. Ayrıca bir AhsbToArgb
ekledim, böylece RGB'ye dönüştürebilir ve alfa kanalı tek çekimde yapabilirim. kırmızı-yeşil-mavi renk-doygunluk-parlaklık dönüştürür -
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
: -
AhsbToArgb
alfa kanalı sağlar
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
- ints için çiftler dönüştürür ve bir renk verir nesne:
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));
}
balık yapmak. org/wiki/HSL_and_HSV –