有人知道如何根据javascript中的颜色生成具有新亮度的4种颜色吗?

有人知道如何根据javascript中的颜色生成具有新亮度的4种颜色吗?,javascript,colors,Javascript,Colors,嘿,我想知道是否有人知道一种方法,可以根据以十六进制输入到javascript函数中的单色生成一些单色颜色。试试: // color looks like 0xRRGGBB function(color){ R = color.substr(2, 2) G = color.substr(4, 2) B = color.substr(6, 2) return "0x" + R + R + R // or return ["0x"+R+R+R, "0x"+G+

嘿,我想知道是否有人知道一种方法,可以根据以十六进制输入到javascript函数中的单色生成一些单色颜色。

试试:

// color looks like 0xRRGGBB
function(color){
    R = color.substr(2, 2)
    G = color.substr(4, 2)
    B = color.substr(6, 2)
    return "0x" + R + R + R
    // or return ["0x"+R+R+R, "0x"+G+G+G, "0x"+B+B+B]
}
顺便说一下:单色是一种矛盾修饰法,不是吗-

试试看:

// color looks like 0xRRGGBB
function(color){
    R = color.substr(2, 2)
    G = color.substr(4, 2)
    B = color.substr(6, 2)
    return "0x" + R + R + R
    // or return ["0x"+R+R+R, "0x"+G+G+G, "0x"+B+B+B]
}

顺便说一下:单色是一种矛盾修饰法,不是吗-

如果要将颜色转换为某种灰度级别,请尝试计算发光,如下所示:

function toGrayScale(color) /* color is an integer */ {

    // Extract the red, green, and blue portions of the color
    var red = (color >> 16) & 0xff;
    var green = (color >> 8) & 0xff;
    var blue = color & 0xff;

    // Calculate the luminescence
    var luminescence = red * 0.3 + green * 0.59 + blue * 0.11;
    var lumInt = Math.floor(luminescence);

    // Combine into a grayscale color
    return (lumInt << 16) + (lumInt << 8) + lumInt;
}

如果要将颜色转换为某种灰度级别,请尝试计算发光,如下所示:

function toGrayScale(color) /* color is an integer */ {

    // Extract the red, green, and blue portions of the color
    var red = (color >> 16) & 0xff;
    var green = (color >> 8) & 0xff;
    var blue = color & 0xff;

    // Calculate the luminescence
    var luminescence = red * 0.3 + green * 0.59 + blue * 0.11;
    var lumInt = Math.floor(luminescence);

    // Combine into a grayscale color
    return (lumInt << 16) + (lumInt << 8) + lumInt;
}

你要做的是计算每个颜色分量相对于平均发光的相对值,然后将它们乘以一对偏移以产生不同的亮度

这是伪代码,我相信您可以了解详细信息:

function getColors(baseline) {
  var offsets = [ 0x33, 0x66, 0x99, 0xCC ];

  // Use Jake's suggestion on computing luminescence...
  var lum = getLuminescence(baseline);

  var redCoefficient = baseline[red] / lum;
  var greenCoefficient = baseline[green] / lum;
  var blueCoefficient = baseline[blue] / lum;

  var output = [];
  for (offsetInd in offsets) {
     var offset = offsets[offsetInd];
     output.push(new Color(offset * redCoefficient, 
         offset * greenCofficient, offset * blueCoefficient));
  }

  return ouptut;
}

你要做的是计算每个颜色分量相对于平均发光的相对值,然后将它们乘以一对偏移以产生不同的亮度

这是伪代码,我相信您可以了解详细信息:

function getColors(baseline) {
  var offsets = [ 0x33, 0x66, 0x99, 0xCC ];

  // Use Jake's suggestion on computing luminescence...
  var lum = getLuminescence(baseline);

  var redCoefficient = baseline[red] / lum;
  var greenCoefficient = baseline[green] / lum;
  var blueCoefficient = baseline[blue] / lum;

  var output = [];
  for (offsetInd in offsets) {
     var offset = offsets[offsetInd];
     output.push(new Color(offset * redCoefficient, 
         offset * greenCofficient, offset * blueCoefficient));
  }

  return ouptut;
}


你能解释一下0.3,0.59,0.11的值吗?嗯,我想知道库勒式单色,在保持色调的同时,颜色聚焦于不同的亮度和强度。这是一个HSV问题吗?@meow,不同的应用程序使用不同的公式。有一组不同的数字,其中R=0.2126,G=0.7152,B=0.0722。如何最好地将颜色映射到灰度是主观的。你能解释一下0.3、0.59、0.11的值吗?嗯,我想知道库勒式单色,在保持色调的同时,颜色聚焦于不同的亮度和强度。这是一个HSV问题吗?@meow,不同的应用程序使用不同的公式。有一组不同的数字,其中R=0.2126,G=0.7152,B=0.0722。如何最好地将颜色映射到灰度是主观的。你的意思是你想要4种亮度不同但色调相同的颜色作为输入颜色吗?我不确定单色是不是这里应该用的词。是的,我很抱歉给你弄糊涂了!我从库勒那里得到这个词,你的意思是你想要4种亮度不同但色调与输入颜色相同的颜色吗?我不确定单色是不是这里应该用的词。是的,我很抱歉给你弄糊涂了!我从KulerI那里学到了这个词对不起,我对原始Javascript不熟悉,输入的颜色是什么?数组?对不起,正如我所说的-这是伪代码-假设你能计算出基线颜色的红/绿/蓝分量,并计算发光-其他答案告诉你如何做到这一点。经过大量的黑客攻击,这一个工作!不过,感谢大家的帮助,我确实使用了所有的code=DKyle-你能发布你的最终解决方案吗?这样其他人就不必像我一样经历你所做的大量黑客攻击了吗?对不起,我是新手,输入的颜色是什么?数组?对不起,正如我所说的-这是伪代码-假设你能计算出基线颜色的红/绿/蓝分量,并计算发光-其他答案告诉你如何做到这一点。经过大量的黑客攻击,这一个工作!不过,感谢大家的帮助,我确实使用了所有的code=DKyle——你能发布你的最终解决方案吗?这样其他人就不必像我一样经历你所做的大量黑客攻击了?