gpt4 book ai didi

C# setHue(或者,将 HSL 转换为 RGB 并设置 RGB)

转载 作者:行者123 更新时间:2023-11-30 22:00:10 25 4
gpt4 key购买 nike

C#有一个非常方便的getHue方法,但是我找不到setHue方法。有吗?

如果不是,我认为在更改色调后定义颜色的最佳方法是将 HSL 值转换为 RGB,然后设置 RGB 值。我知道 Internet 上有执行此操作的公式,但我最好如何使用 C# 执行从 HSL 到 RGB 的转换?

谢谢

最佳答案

要设置色调,您可以创建一个新的 Color,可能是通过使用 GetHueGetSaturation 从给定的颜色。请参阅下面的 getBrightness 函数!

我正在使用这个:

Color SetHue(Color oldColor)
{
var temp = new HSV();
temp.h = oldColor.GetHue();
temp.s = oldColor.GetSaturation();
temp.v = getBrightness(oldColor);
return ColorFromHSL(temp);
}

// A common triple float struct for both HSL & HSV
// Actually this should be immutable and have a nice constructor!!
public struct HSV { public float h; public float s; public float v;}

// the Color Converter
static public Color ColorFromHSL(HSV hsl)
{
if (hsl.s == 0)
{ int L = (int)hsl.v; return Color.FromArgb(255, L, L, L); }

double min, max, h;
h = hsl.h / 360d;

max = hsl.v < 0.5d ? hsl.v * (1 + hsl.s) : (hsl.v + hsl.s) - (hsl.v * hsl.s);
min = (hsl.v * 2d) - max;

Color c = Color.FromArgb(255, (int)(255 * RGBChannelFromHue(min, max,h + 1 / 3d)),
(int)(255 * RGBChannelFromHue(min, max,h)),
(int)(255 * RGBChannelFromHue(min, max,h - 1 / 3d)));
return c;
}

static double RGBChannelFromHue(double m1, double m2, double h)
{
h = (h + 1d) % 1d;
if (h < 0) h += 1;
if (h * 6 < 1) return m1 + (m2 - m1) * 6 * h;
else if (h * 2 < 1) return m2;
else if (h * 3 < 2) return m1 + (m2 - m1) * 6 * (2d / 3d - h);
else return m1;

}

不要使用内置的 GetBrightness 方法!它为红色、品红色、青色、蓝色和黄色 (!) 返回相同的值 (0.5f)。这样更好:

// color brightness as perceived:
float getBrightness(Color c)
{ return (c.R * 0.299f + c.G * 0.587f + c.B *0.114f) / 256f; }

关于C# setHue(或者,将 HSL 转换为 RGB 并设置 RGB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28759764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com