vb.net - 将整数转换为颜色,从红色开始循环

标签 vb.net colors

如何将整数转换为可用颜色(对于 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(它们的最大值),然后改变色调值以创建光谱的不同颜色。

关于您的具体问题(并详细说明鲁本斯的回答),您可以从任何 int32 创建颜色像这样的值:

int i = 4837429;
Color color = Color.FromArgb(i);

但是,这不会实现您在问题中描述的环绕颜色效果,实际上您的 int32 中的大部分变化都无法实现。值(假设您的范围从 MinValue 到 MaxValue)将应用于 alpha channel 或不透明度,这听起来不像您想要的。

更新 :这里有一些应该做你需要的东西:
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));
}
d WheelColor 中的参数意味着从 0.0 到 1.0,并将循环通过色轮(有点),当 d = 0.0 时从红色开始,当 d = 1.0 时返回红色。

关于vb.net - 将整数转换为颜色,从红色开始循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528949/

相关文章:

java - 如何正确从rgb565转换为rgb888

c# - VB.NET Select...C# 中等效的 Case 语句

asp.net - 如何将 IDENTITY_INSERT 设置为 ON?

c# - 检测音频是否已停止播放

r - ggplot : color, geom_point 中的填充和大小

bash - 如何更改特定字符序列的 bash 输出颜色

vb.net - 禁用按钮上的实际文本颜色

mysql - 数据库不通过数据集和tableAdapter Vb .Net插入行

vb.net - 迭代 Hashtable 并有条件地删除 VB.NET 中的条目的最佳方法

matlab - Matlab中的散点图: same colour to same class