1

我正在玩 HSV 颜色。从 rgb 颜色转换后,我有一个 hsv 数组:

//hsv[0], hsv[1], hsv[2]
var hsv = rgbToHsv(rgb[0], rgb[1], rgb[2]);

我将添加或减去它

hsv[0] += ...
hsv[1] += ...
hsv[2] += ...

我需要在将其转换回 rgb 之前验证该值。hsv 的有效范围是多少?

这是我用来将 rgb 转换为 hsv 的函数

function rgbToHsv(r, g, b) {  
    var r = (r / 255),  
         g = (g / 255),  
     b = (b / 255);   
    var min = Math.min(Math.min(r, g), b),  
        max = Math.max(Math.max(r, g), b),  
        delta = max - min;  
    var value = max,  
        saturation,  
        hue;  
    // Hue  
    if (max == min) {  
        hue = 0;  
    } else if (max == r) {  
        hue = (60 * ((g-b) / (max-min))) % 360;  
    } else if (max == g) {  
        hue = 60 * ((b-r) / (max-min)) + 120;  
    } else if (max == b) {  
        hue = 60 * ((r-g) / (max-min)) + 240;  
    }  
    if (hue < 0) {  
        hue += 360;  
    }  
    // Saturation  
    if (max == 0) {  
        saturation = 0;  
    } else {  
        saturation = 1 - (min/max);  
    }  
    return [(hue), (saturation * 100), (value * 100)];  
}
4

1 回答 1

0

大致相同的算法用于此在线转换器。您可以在相反的转换之后查看文章。

H 绝对在 0 到 360 之间,但对于 S 和 V,它是不同的。与颜色转换或颜色混合模式计算的大多数值一样,使用介于 0 和 1 之间的浮点数。我会说这更好,因为浮动意味着您可以拥有所需的所有精度级别。

现在将其乘以 100 以获得百分比并不少见(例如在此在线转换器和您当前的 javascript 上)。通常也是圆形的。了解这种舍入的重要一点是,如果您来回转换,显然它会增加您获得不同 RGB 颜色的机会rgb > hsv > rgb。如果这很重要,那么你最好使用花车。

既然你问什么是“有效的”,我想说它只取决于你想如何使用它或这些数字将在哪里使用。

于 2019-07-26T04:31:47.227 回答