当前位置: 首页 > 面试题库 >

JS函数计算补色?

慕健
2023-03-14
问题内容

有人知道吗,您很想知道一种用于计算十六进制值的互补色的Javascript解决方案?

网络上有许多颜色选择套件和调色板生成器,但是我还没有看到使用JS实时计算颜色的工具。

详细的提示或摘要将不胜感激。


问题答案:
// Complement

        temprgb={ r: 0, g: 0xff, b: 0xff }; // Cyan

        temphsv=RGB2HSV(temprgb);

        temphsv.hue=HueShift(temphsv.hue,180.0);

        temprgb=HSV2RGB(temphsv);

        console.log(temprgb); // Complement is red (0xff, 0, 0)



        function RGB2HSV(rgb) {

            hsv = new Object();

            max=max3(rgb.r,rgb.g,rgb.b);

            dif=max-min3(rgb.r,rgb.g,rgb.b);

            hsv.saturation=(max==0.0)?0:(100*dif/max);

            if (hsv.saturation==0) hsv.hue=0;

            else if (rgb.r==max) hsv.hue=60.0*(rgb.g-rgb.b)/dif;

            else if (rgb.g==max) hsv.hue=120.0+60.0*(rgb.b-rgb.r)/dif;

            else if (rgb.b==max) hsv.hue=240.0+60.0*(rgb.r-rgb.g)/dif;

            if (hsv.hue<0.0) hsv.hue+=360.0;

            hsv.value=Math.round(max*100/255);

            hsv.hue=Math.round(hsv.hue);

            hsv.saturation=Math.round(hsv.saturation);

            return hsv;

        }



        // RGB2HSV and HSV2RGB are based on Color Match Remix [http://color.twysted.net/]

        // which is based on or copied from ColorMatch 5K [http://colormatch.dk/]

        function HSV2RGB(hsv) {

            var rgb=new Object();

            if (hsv.saturation==0) {

                rgb.r=rgb.g=rgb.b=Math.round(hsv.value*2.55);

            } else {

                hsv.hue/=60;

                hsv.saturation/=100;

                hsv.value/=100;

                i=Math.floor(hsv.hue);

                f=hsv.hue-i;

                p=hsv.value*(1-hsv.saturation);

                q=hsv.value*(1-hsv.saturation*f);

                t=hsv.value*(1-hsv.saturation*(1-f));

                switch(i) {

                case 0: rgb.r=hsv.value; rgb.g=t; rgb.b=p; break;

                case 1: rgb.r=q; rgb.g=hsv.value; rgb.b=p; break;

                case 2: rgb.r=p; rgb.g=hsv.value; rgb.b=t; break;

                case 3: rgb.r=p; rgb.g=q; rgb.b=hsv.value; break;

                case 4: rgb.r=t; rgb.g=p; rgb.b=hsv.value; break;

                default: rgb.r=hsv.value; rgb.g=p; rgb.b=q;

                }

                rgb.r=Math.round(rgb.r*255);

                rgb.g=Math.round(rgb.g*255);

                rgb.b=Math.round(rgb.b*255);

            }

            return rgb;

        }



        //Adding HueShift via Jacob (see comments)

        function HueShift(h,s) { 

            h+=s; while (h>=360.0) h-=360.0; while (h<0.0) h+=360.0; return h; 

        }



        //min max via Hairgami_Master (see comments)

        function min3(a,b,c) { 

            return (a<b)?((a<c)?a:c):((b<c)?b:c); 

        } 

        function max3(a,b,c) { 

            return (a>b)?((a>c)?a:c):((b>c)?b:c); 

        }


 类似资料:
  • 本文向大家介绍在js中做数字字符串补0(js补零),包括了在js中做数字字符串补0(js补零)的使用技巧和注意事项,需要的朋友参考一下 通常遇到的一个问题是日期的“1976-02-03 HH:mm:ss”这种格式 ,我的比较简单的处理方法是这样: 这种方法是逻辑比较简单的,而且规则也简单。除了with(d||new Date)的使用之外,也算不上什么技巧。但是,如果用这种方法来做数字字符串补0,那

  • 问题内容: 在中,我使用或计算成对互相关函数,以便找出哪个偏移使我获得了最大值。从它的外观来看,给了我一个规范化的值序列。Python的scipy中是否有类似的东西,还是应该使用该模块?目前,我正在执行以下操作: 问题答案: 要使一维数组互相关,请使用numpy.correlate。 对于2d数组,请使用scipy.signal.correlate2d。 还有scipy.stsci.convolv

  • 本文向大家介绍JS计算两个数组的交集、差集、并集、补集(多种实现方式),包括了JS计算两个数组的交集、差集、并集、补集(多种实现方式)的使用技巧和注意事项,需要的朋友参考一下 方法一:最普遍的做法 使用 ES5 语法来实现虽然会麻烦些,但兼容性最好,不用考虑浏览器 JavaScript 版本。也不用引入其他第三方库。 1,直接使用 filter、concat 来计算 2,对 Array 进行扩展

  • 是否有一种方法可以编写递归函数,该函数打印数字中的位数,以便: -它是一个无效函数 -"if"条件是if(num==0),返回 -“else”将调用递归。 我看到了两种不同类型的代码,其中一种是“if”条件具有递归调用,另一种是用于“return”。但这不是我想要的。 我很不擅长递归,并试图通过自己编写代码来理解它,但没有成功。 这是我的代码(我明白为什么它打印122而不是3,但我真的不知道如何以

  • 问题内容: 因此,如果我想使用pow函数计算6 ^ 8 mod 5的值,那我应该放在一行中吗? 假设您不需要先导入 我知道pow的用法像pow(x,y)= pow(6,8)= 6 ^ 8并且 我的猜测是 谢谢! 问题答案: 很简单:对模数采用可选的第3个参数。 从文档: 将x返回到幂y; 如果存在z,则将x取幂y,对z取模(比高效地计算。)。二元形式pow(x,y)等效于使用幂运算符: 。 所以你

  • 我知道这个问题已经被问过很多次了,但是我的问题有点不同。这个任务要求我不验证一个字符串是否是回文——而是验证一个字符串中有多少回文(返回为“int”)。这应该使用迭代函数来完成 以下是我的迭代函数代码供参考: 我只是很难把它转换成递归函数。感谢所有帮助!