如何将整数转换为可用的颜色(对于PictureBox.CreateGraphics)? 颜色应该从红色开始,循环到橙色,黄色等,并再次回到红色. 这是在vb.net中.如果我不能这样做,我如何使用十六进制代码而不是笔
颜色应该从红色开始,循环到橙色,黄色等,并再次回到红色.
这是在vb.net中.如果我不能这样做,我如何使用十六进制代码而不是笔使用PictureBox.CreateGraphics?
谢谢您的帮助!
您可以使用HSB(色调,饱和度,亮度)颜色代替RGB颜色. .Net可以自动将RGB颜色转换为HSB(使用Color.GetHue,.GetSaturation和.GetBrightness方法),但不会转向另一个方向.以下是处理将HSB颜色转换为RGB的代码示例:http://splinter.com.au/blog/?p=29
(此代码示例使用“V”而不是“B”,可能用于“值”而不是“亮度”).
使用HSB颜色的优点是Hue参数的范围从0到360,并且可以解释为色轮上的位置,因此值很好地从360回到0.为了您的目的,您可以通过设置创建颜色饱和度和亮度值为1.0(最大值),然后改变色调值以创建不同的光谱颜色.
关于您的具体问题(并详细说明Rubens的答案),您可以从任何int32值创建一个颜色,如下所示:
int i = 4837429; Color color = Color.FromArgb(i);
但是,这不会实现您在问题中描述的环绕颜色效果,事实上,int32值的大部分变化(假设您的范围从MinValue到MaxValue)将应用于Alpha通道,或者不透明度,听起来不像你想要的那样.
更新:这里应该做你需要的东西:
private const double ONE_SIXTH = 0.16666666666666666666666666666667; private const double ONE_THIRD = 0.33333333333333333333333333333333; private const double TWO_THIRDS = 0.66666666666666666666666666666667; private const double FIVE_SIXTHS = 0.83333333333333333333333333333333; public Color WheelColor(double d) { if ((d < 0.0) || (d > 1.0)) { throw new ArgumentOutOfRangeException("d", d, "d must be between 0.0 and 1.0, inclusive"); } double R = 1; double G = 1; double B = 1; if (d < ONE_SIXTH) { G = d / ONE_SIXTH; B = 0; } else if (d < ONE_THIRD) { R = 1 - ((d - ONE_SIXTH) / ONE_SIXTH); B = 0; } else if (d < 0.5) { R = 0; B = (d - ONE_THIRD) / ONE_SIXTH; } else if (d < TWO_THIRDS) { R = 0; G = 1 - ((d - 0.5) / ONE_SIXTH); } else if (d < FIVE_SIXTHS) { R = (d - TWO_THIRDS) / ONE_SIXTH; G = 0; } else { B = 1 - ((d - FIVE_SIXTHS) / ONE_SIXTH); G = 0; } return Color.FromArgb((int)(R * 255), (int)(G * 255), (int)(B * 255)); }
WheelColor中的d参数意味着从0.0到1.0,并将循环通过色轮(排序),当d = 0.0时从红色开始,当d = 1.0时返回红色.