基本上我需要知道win ColorHLSToRGB(H, L, S)
等win32函数中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);
}
使用的参考文献:
答案 0 :(得分:0)
Rich Newman创建了HSLColor Class。您可能会发现使用它比使用Win32函数更好。
要回答你原来的问题,Rich Newman的课程似乎使用240作为你所寻求的价值。
答案 1 :(得分:0)
微软的网站似乎没有包含这些值。 但是,WINE API文档声明值为0-240。