將css 中的16進位顏色, 轉化為 rgb格式,cssrgb
對dojo/_base/Color模組的註解, 源地址 https://github.com/robinxiong/dojo/blob/master/_base/Color.js
function fromHex(color){ /* summary: 將css的屬性值,轉變為rgb格式的對像 "#fff" -> 0xfff 長度為4, 一個字元佔用代表一個屬性, 0x10 == 16(2的4次方,即1後面4個0) === 1 0000, 那麼一個f 為 1111 預留位置為 mask = 1111, 用於佔住後四位(&用於保留後四位的值), 其它高位清零 每一次遍曆都從後四位開始,所以先擷取到 b值,難後移動4位,在擷取到 g, 在移動4位,擷取到 r 擷取b屬性: 0000 1111 1111 1111 & 0000 0000 0000 1111 (這裡只列舉出16位, 正常的是32位) 0000 0000 0000 1111 b儲存到變數 c 0000 1111 1111 1111 >> 4, -> 0000 0000 1111 1111 擷取g屬性 0000 0000 1111 1111 & 0000 0000 0000 1111 0000 0000 0000 1111 獲得到g的值,儲存到變數 c 在移四位,擷取r的值 "ffffff" -> 0xffffff 長度為8,每兩個字元代表一個函數 0xff = 1111 1111 每次擷取後8位,剛好代表顏色值 */ var t = {}, bits = (color.length == 4) ? 4 : 8,//如果是shorthand, #fff, 那麼bits為4位, 每一位代表的個屬性, 其它的為8位 每兩位代表一個屬性 #ffffff00 mask = (1 << bits) - 1; //表示位元組預留位置, 向左移4位或8位,var a = (1 << 4 ) - 1 -> 10000 - 1, a.toString(2); // 1111,或者 8位的 1111 1111 color = Number("0x" + color.substr(1)); //#ff0000 轉變為16進位0xff0000; if(isNaN(color)){ return null; // Color } ["b", "g", "r"].forEach(function(x){ var c = color & mask; color >>= bits; t[x] = bits == 4 ? 17 * c : c; // 0xfff , 一個f應該代表 255, 應該當[0-255],按15等份劃分,每一等份間隔 17。 所以獲得的值需要乘以17, 才能表示rgb中255的值 }); t.a = 1; return t;// Color } console.log(fromHex("#00f")) // {r:0, g: 0, b:255, a:1}
代碼中怎把RGB顏色值轉換成16進位?
簡單的移位和按位加:
int r,g,b;
int c; // TC 用 long int;
// 如果次序是RRGGBB
c = r << 16 | g << 8 | b;
// 如果次序是BBGGRR
c = b << 16 | g << 8 | r;
---------------------------------
例如:
#include "stdio.h"
int RGB(int r,int g,int b)
{
return r << 16 | g << 8 | b;
}
void main()
{
int r,g,b,c;
r = 255; g=255; b=255;
c = RGB(r,g,b);
printf("0x%06x",c);
}
怎將十六進位轉化成RGB
每兩個16進位就是RGB的一位,如BLACK=0XFFFFFF=RGB(FF,FF,FF)