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

如何获得#xxxxxx颜色的色调?

刘嘉木
2023-03-14
问题内容

如何提取指定为“ #rrggbb”的颜色的色相成分?


问题答案:

如果您搜索如何将RGB转换为HSL,则会发现许多算法,包括Sergey链接的Wikipedia文章。

首先,提取十六进制颜色表示法的RGB分量。

var color='#c7d92c'; // A nice shade of green.
var r = parseInt(color.substr(1,2), 16); // Grab the hex representation of red (chars 1-2) and convert to decimal (base 10).
var g = parseInt(color.substr(3,2), 16);
var b = parseInt(color.substr(5,2), 16);

这将使您获得颜色的字节(0-255)表示形式。在这种情况下为199、217、44。

然后,您可以使用Wikipedia文章中的公式来计算色相,或无耻地窃取他人的代码:

function rgbToHsl(r, g, b){
    r /= 255, g /= 255, b /= 255;
    var max = Math.max(r, g, b), min = Math.min(r, g, b);
    var h, s, l = (max + min) / 2;

    if(max == min){
        h = s = 0; // achromatic
    }else{
        var d = max - min;
        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
        switch(max){
            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
            case g: h = (b - r) / d + 2; break;
            case b: h = (r - g) / d + 4; break;
        }
        h /= 6;
    }

    return [h, s, l];
}

现在,我们可以将这两个代码片段放在一起并获得色相:

var hue = rgbToHsl(r, g, b)[0] * 360;

[0]是抓住色相-该函数返回一个数组([h,s,l])。由于色相的返回值介于0和1之间,因此我们乘以360。我们想将其转换为度。

随着的例子色彩#c7d92chue将是〜66.24。Photoshop的颜色选择器表示该颜色的色相为66°,因此看起来我们不错!



 类似资料:
  • 问题内容: 我希望能够拍摄图像并找出平均颜色是多少。意思是如果图像是半黑半白,我会在两者之间得到一些…灰色阴影。它可能是最常见的单色或中间值。任何平均值都可以。 我该如何在android中做到这一点。 问题答案:

  • 问题内容: 我正在尝试使用pdfbox从pdf中提取包含所有信息的文本。我获得了我想要的所有信息,除了颜色。我尝试了多种获取fontcolor的方法(包括使用PDFBox获取文本颜色)。但是没有用。现在,我从pdfBox的PageDrawer类复制了代码。但是,RGB值也不正确。 我正在使用上面的代码。得到的值是r = 0,g = 0,b = 0,内部cosp对象值为[0.0],内部pd对象数组=

  • 原文:Specifying Colors 在 matplotlib 的几乎所有地方,用户都可以指定颜色,它可以以如下形式提供: RGB 或者 RGBA 浮点值元组,[0, 1]之间,例如(0.1, 0.2, 0.5)或者(0.1, 0.2, 0.5, 0.3)。 RGB 或者 RGBA 十六进制字符串,例如#0F0F0F或者#0F0F0F0F。 [0, 1]之间的浮点值的字符串表示,用于表示灰度,

  • 如何将标题字体颜色更改为白色,填充为绿色?以下是我正在使用的类: 我相信,这是必须插入的代码。

  • 问题内容: 我正在处理图像,并想确定一组像素是否更接近白色或黑色。 因此,给定一组 颜色/像素 ,如何确定它们接近白色还是黑色? 我尝试了一些笨拙的算法,有人知道我该怎么做吗? 问题答案: 我要说的是,您可以先将颜色转换为灰度,然后检查它是否更接近黑色或白色。 首先将RGB颜色值转换为通过以下公式计算亮度 然后检查该值是接近于0还是255,并相应地选择黑色或白色 请注意,如果未对颜色空间进行伽玛压

  • 问题内容: 所以我有一个带有火山的图像文件。其他所有内容均为0xFFFF00FF(不透明的洋红色)。我想将包含该颜色的每个像素替换为0(透明)。到目前为止,我的方法如下所示: 这工作正常,但似乎很慢。我见过有人以其他方式执行此操作,但是我不知道发生了什么。如果有人知道更好的方法,我非常想听听。 问题答案: 为了避免遍历像素,请更改基础ColorModel。这是一个例子。以下是作者使用原始Buffe