栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Javascript将HSB / HSV颜色准确转换为RGB

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Javascript将HSB / HSV颜色准确转换为RGB

/ accepts parameters
* h Object = {h:x, s:y, v:z}
* OR
* h, s, v



/
function HSVtoRGB(h, s, v) {
var r, g, b, i, f, p, q, t;
if (arguments.length === 1) {
s = h.s, v = h.v, h = h.h;
}
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0: r = v, g = t, b = p; break;
case 1: r = q, g = v, b = p; break;
case 2: r = p, g = v, b = t; break;
case 3: r = p, g = q, b = v; break;
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
return {
r: Math.round(r * 255),
g: Math.round(g * 255),
b: Math.round(b * 255)
};
}

0 <= h, s, v <= 1
如果您使用度数或弧度,则此代码应为,请记住将其分开。

返回

0 <= r, g, b <= 255
的值四舍五入到最接近的 Integer
。如果您不希望出现这种情况,请
Math.round
从返回的对象中删除。


反之(除法较少)

function RGBtoHSV(r, g, b) {    if (arguments.length === 1) {        g = r.g, b = r.b, r = r.r;    }    var max = Math.max(r, g, b), min = Math.min(r, g, b),        d = max - min,        h,        s = (max === 0 ? 0 : d / max),        v = max / 255;    switch (max) {        case min: h = 0; break;        case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break;        case g: h = (b - r) + d * 2; h /= 6 * d; break;        case b: h = (r - g) + d * 4; h /= 6 * d; break;    }    return {        h: h,        s: s,        v: v    };}

该代码将输出

0 <= h, s, v <= 1
,但是这次需要任何时间
0 <= r, g, b <= 255
(不需要是整数)


为了完整性,

function HSVtoHSL(h, s, v) {    if (arguments.length === 1) {        s = h.s, v = h.v, h = h.h;    }    var _h = h,        _s = s * v,        _l = (2 - s) * v;    _s /= (_l <= 1) ? _l : 2 - _l;    _l /= 2;    return {        h: _h,        s: _s,        l: _l    };}function HSLtoHSV(h, s, l) {    if (arguments.length === 1) {        s = h.s, l = h.l, h = h.h;    }    var _h = h,        _s,        _v;    l *= 2;    s *= (l <= 1) ? l : 2 - l;    _v = (l + s) / 2;    _s = (2 * s) / (l + s);    return {        h: _h,        s: _s,        v: _v    };}

所有这些值应在范围

0
1
。对于
HSL<->RGB
_通过去 _HSV



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/575105.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号