2014-10-27 58 views
0

我有XML文件,其中元素返回颜色可用节点中的节点的颜色值以Win32颜色值的形式存储。现在要将此值转换为十六进制值,以便我可以在jQuery中将它用作CSS属性。从win32颜色代码设置元素BackColor在jQuery

例子如下

<INPUTBACKCOLOR>33023</INPUTBACKCOLOR> 

将其更改为

$("elemet").css('background-color',"#SomeHexValueFromINPUTBACKCOLORNode") 

我怎样才能做到这一点?

+0

通过 “Win32的颜色值”,你的意思了'COLORREF'?换句话说,'33023'颜色是否会产生纯橙色? – 2014-10-27 08:43:51

+0

@FrédéricHamidi是的,它是.. – Jankya 2014-10-27 08:44:55

回答

1

你的源颜色被存储在COLORREF,因此其结构形式0x00bbggrr(十六进制)。

因此,将其转换为它的CSS表现,你必须:

  • 值转换为十六进制字符串,
  • 垫十六进制字符串左侧零,
  • 交换红色和蓝色通道,
  • 预先安排一个散列符号#

能与像来实现:

var cssColor = "000000" + parseInt(sourceColor, 10).toString(16); 
cssColor = cssColor.substr(cssColor.length - 6); 
cssColor = "#" + cssColor.substr(4, 2) + cssColor.substr(2, 2) 
    + cssColor.substr(0, 2) 
+0

谢谢你的答案。我在我的网页上试过这个,但没有显示正确的颜色。这种颜色是橙色的,但它显示不同的颜色。其他元素具有白色作为BackColor,并显示一些不同的颜色。白色颜色代码是16777215. – Jankya 2014-10-27 09:15:26

+0

奇怪的是,它对我有用(我创建了一个小提琴[here](http://jsfiddle.net/rnxjvLeh/)来演示)。 – 2014-10-27 09:27:13

+0

我已更新小提琴示例,请检查其没有正确的颜色值。我只是想知道为什么它没有来到正确的价值观。如果你通过直接价值,它的工作正常,但如果你从某个地方取得了这个价值,那么它给予的问题。 – Jankya 2014-10-27 09:39:51

1

下面是代码:

color = 33023; 
r = color & 0x000000FF; 
g = (color & 0x0000FF00) >> 8; 
b = (color & 0x00FF0000) >> 16; 

alert(r+" "+g+" "+b); 

它转换颜色为rgb,现在你可以将其转换为十六进制或可以使用RGB()的表达。

Source

function getColor(color) 
{ 
    r = color & 0x000000FF; 
    g = (color & 0x0000FF00) >> 8; 
    b = (color & 0x00FF0000) >> 16; 
    return "rgb("+r+","+g+","+b+")"; 
} 

function getColorAndAlpha(color) 
{ 
    r = color & 0x000000FF; 
    g = (color & 0x0000FF00) >> 8; 
    b = (color & 0x00FF0000) >> 16; 
    a = (color & 0xFF000000) >> 24; 
    return "rgba("+r+","+g+","+b+","+a+")"; 
}