当前位置 : 主页 > 编程语言 > c语言 >

vb.net – 将整数转换为颜色,从红色开始并循环显示

来源:互联网 收集:自由互联 发布时间:2021-06-24
如何将整数转换为可用的颜色(对于PictureBox.CreateGraphics)? 颜色应该从红色开始,循环到橙色,黄色等,并再次回到红色. 这是在vb.net中.如果我不能这样做,我如何使用十六进制代码而不是笔
如何将整数转换为可用的颜色(对于PictureBox.CreateGraphics)?

颜色应该从红色开始,循环到橙色,黄色等,并再次回到红色.

这是在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时返回红色.

网友评论