以编程方式使十六进制颜色变暗

mk1*_*k12 34 hex colors

以编程方式使六角颜色变暗的最简单方法是什么?

Jam*_*and 38

如果你没有太多的控制权,只想要一个通常较暗的颜色版本,那么:

col = (col & 0xfefefe) >> 1;
Run Code Online (Sandbox Code Playgroud)

是一种很好的快速方法来将颜色值减半(假设它显然是每个通道的一个字节打包).

更明亮的是:

col = (col & 0x7f7f7f) << 1;
Run Code Online (Sandbox Code Playgroud)

  • 更亮的是`(col&0x7f7f7f)<< 1`虽然对于更复杂的东西,你最好分解RGB组件并单独操作它们 (4认同)
  • 要获得稍微暗一点的东西,试试这个:`((col&0x7E7E7E)>> 1)| (col&0x808080)` (4认同)
  • 你能解释一下这里发生了什么吗? (4认同)
  • @Sisir:0xFE是二进制的"11111110".使用`&`运算符将每个颜色字节的最小位(十进制值1)设置为零.`>>`操作符将所有内容向下移动一个位置,因此零点现在位于值为255点的位置,并且每种颜色的其余部分的位置仅为之前值的一半. (2认同)

lub*_*sko 25

将十六进制颜色转换为整数RBG组件:

#FF6600 = rbg(255, 102, 0)
Run Code Online (Sandbox Code Playgroud)

如果你想让它变暗5%,那么只需将所有整数值减少5%:

255 - 5% = 242
102 - 5% = 96
0 - 5% = 0

= rbg(242, 96, 0)
Run Code Online (Sandbox Code Playgroud)

转换回十六进制颜色

= #F26000
Run Code Online (Sandbox Code Playgroud)


mik*_*iku 18

在javascript中实现的函数:

// credits: richard maloney 2006
function getTintedColor(color, v) {
    if (color.length >6) { color= color.substring(1,color.length)}
    var rgb = parseInt(color, 16); 
    var r = Math.abs(((rgb >> 16) & 0xFF)+v); if (r>255) r=r-(r-255);
    var g = Math.abs(((rgb >> 8) & 0xFF)+v); if (g>255) g=g-(g-255);
    var b = Math.abs((rgb & 0xFF)+v); if (b>255) b=b-(b-255);
    r = Number(r < 0 || isNaN(r)) ? 0 : ((r > 255) ? 255 : r).toString(16); 
    if (r.length == 1) r = '0' + r;
    g = Number(g < 0 || isNaN(g)) ? 0 : ((g > 255) ? 255 : g).toString(16); 
    if (g.length == 1) g = '0' + g;
    b = Number(b < 0 || isNaN(b)) ? 0 : ((b > 255) ? 255 : b).toString(16); 
    if (b.length == 1) b = '0' + b;
    return "#" + r + g + b;
} 
Run Code Online (Sandbox Code Playgroud)

例:

> getTintedColor("ABCEDEF", 10)
> #c6f7f9
Run Code Online (Sandbox Code Playgroud)


Nat*_*e B 13

好吧,我没有任何伪代码,但提示.如果要使颜色变暗并保持其色调,则应将该十六进制转换为HSB(色调,饱和度,亮度)而不是RGB.这样,您可以调整亮度,它仍然看起来像没有色调偏移的相同颜色.然后,您可以将该HSB转换回十六进制.


Joh*_*nck 5

given arg darken_factor # a number from 0 to 1, 0=no change, 1=black
for each byte in rgb_value
    byte = byte * (1 - darken_factor)
Run Code Online (Sandbox Code Playgroud)