柱面坐标的默认最大颜色值
本文关键字:颜色值 默认 坐标 柱面 | 更新日期: 2023-09-27 18:02:26
基本上我需要知道在win32函数中H, L和S的有效范围,如ColorHLSToRGB(H, L, S)
。
这个问题的基本前提是错误的。以这种方式反转并不总是给一个对比的颜色,特别是当要对比的颜色是接近灰色。最后我选择了黑色或白色作为对比色。如果能回答这个问题并知道HLSMAX默认值是多少,那就太好了。
我试图得到一个背景颜色的文本对比的颜色。为此,我编写了以下代码,但我不确定H、L和S的值范围是什么。240似乎是一些网站上给出的数字(参见我在下面使用的参考文献和/或谷歌HLSMAX),但这是如此之低,以至于精度会丢失。似乎不对……更不用说我没有得到对比色。颜色看起来一样。
有问题的部分是对比度
第一行的HLSMAX值 [DllImport("shlwapi.dll")]
static extern void ColorRGBToHLS(int RGB, ref int H, ref int L, ref int S);
[DllImport("shlwapi.dll")]
static extern RGB ColorHLSToRGB(int H, int L, int S);
[StructLayout(LayoutKind.Sequential)]
public struct RGB
{
public byte r, g, b;
public RGB(Color colorIn)
{
r = colorIn.R;
g = colorIn.G;
b = colorIn.B;
}
public Int32 ToInt32()
{ return BitConverter.ToInt32(new byte[4] {r, g, b, 0},0); }
public Color ToColor()
{ return Color.FromRgb(r, g, b); }
}
private Color contrastColor(Color color)
{
int HLSMAX=240;//Is this right??? It seems too low!
RGB rgb = new RGB(color);
int h=0, l=0, s=0;
ColorRGBToHLS(rgb.ToInt32(), ref h, ref l, ref s);
h=(h+(HLSMAX/2))%HLSMAX;
l = HLSMAX - l;
rgb = ColorHLSToRGB(h, l, s);
return Color.FromArgb(color.A, rgb.r, rgb.g, rgb.b);
}
参考使用:
- MSN 'How to' on conversion color
- 维基百科文章详细介绍圆柱颜色坐标
- Pinvoke.net的colorhlstorgb条目
- Pinvoke.net的colorrgbtohls条目
微软的网站似乎没有包含这些值。然而,WINE API文档规定的值是0-240。
https://source.winehq.org/WineAPI/ColorRGBToHLS.htmlRich Newman创建了一个HSLColor类。你可能会发现使用这个比使用Win32函数更好。
为了回答你最初的问题,Rich Newman的课程似乎使用240作为你正在寻找的值。