
Model RGB
System RGB przedstawia kolor w postaci trzech liczb naturalnych lub jednej liczby heksadecymalnej.
System RGB był stworzony pod kątem łatwości obliczania kolorów do wyświetlania na ekranach telewizorów i monitorów.
Jest powszechnie używany na stronach internetowych i w grafice internetowej.
R albo r oznacza 'red’ czyli składnik czerwony.
G albo g oznacza 'green’, czyli składnik zielony.
B albo b oznacza 'blue’ czyli składnik niebieski.
Każdy z powyższych trzech kolorów jest jedną z 256 liczb od 0 do 255.
W systemie RGB można przedstawić 256 x 256 x 256 = 16 777 216 kolorów.
Kolor RGB możemy przedstawić w postaci:
- liczb dziesiętnych
rgb(255, 0, 0) - procentów
rgb(100%, 0%, 0%) - liczb zmiennoprzecinkowcych
rgb(1.0, 0, 0), każda od 0.00 do 1.0 - liczby heksadecymalnej „color: #FF0000”;
Liczba heksadecymalna
6 cyfr
Standardowy zapis trzech kolorów. Kanał alfa α=1.0:
>#FF0000
8 cyfr
Ostatnie 2 cyfry oznaczają kanał alfa:
#FF0000CC oznacza rgba(255, 0, 0, 0.8)
3 cyfry
Zapis #FC0 oznacza, że każdy z kanałów został podzielony na 16 wartości od 0 do F, gdzie 0 oznacza minimum, a F oznacza maksimum.
Czyli mamy 16/16, 12/16, 0/16
4 cyfry
Identycznie jak dla zapisu 3-cyfrowego, czwarta cyfra oznacza kanał alfa:
#FC02 oznacza 16/16, 12/16, 0/16, 2/16
Palety kolorów
Dostępnych jest wiele palet kolorów RGB:
- Paleta 16 kolorów nazwanych
- Paleta 216 kolorów bezpiecznych dla Internetu
- Rozszerzona paleta kolorów nazwanych
- Kolory z polskimi nazwami
Przeliczanie int na hex
Listing
/*
* funkcja zmieniająca wartości RGB na liczbe heksadecymalna. Liczby musza być
* podane jako inty od 0 do 255 włącznie
*/
function RGBToHex(r, g, b) {
var r1 = r.toString(16).toUpperCase();
var g1 = g.toString(16).toUpperCase();
var b1 = b.toString(16).toUpperCase();
if (r1.length == 1) {
r1 = "0" + r1;
}
if (g1.length == 1) {
g1 = "0" + g1;
}
if (b1.length == 1) {
b1 = "0" + b1;
}
return "0x" + r1 + g1 + b1;
};
Przeliczanie hex na int
Listing
/* funkcja zmieniająca liczbę heksadecymalną na wartosci RGB
* Liczba może być podana jako 0x np "0xFFFFFF" lub "#FFFFFF"
* lub "FFFFFF"
*/
function HexToRGB(hexa) {
var R = -1;
var G = -1;
var B = -1;
if (((hexa.indexOf("x") == -1) && (hexa.indexOf("#") == -1))) {
R = parseInt(hexa.substr(0, 2), 16);
G = parseInt(hexa.substr(2, 2), 16);
B = parseInt(hexa.substr(4, 2), 16);
} else {
if (hexa.indexOf("#") > 0) {
R = parseInt(hexa.substr(1, 2), 16);
G = parseInt(hexa.substr(3, 2), 16);
B = parseInt(hexa.substr(5, 2), 16);
} else if (hexa.indexOf("x") > 0) {
R = parseInt(hexa.substr(2, 2), 16);
G = parseInt(hexa.substr(4, 2), 16);
B = parseInt(hexa.substr(6, 2), 16);
}
}
return [ R, G, B ];
};
Sposoby zapisania tego samego koloru
Listing
var cv = document.getElementById("canvas");
var ctx = cv.getContext("2d");
ctx.beginPath();
ctx.fillStyle = "mediumseagreen";
ctx.fillRect(10, 10, 30, 30);
ctx.fillStyle = "black";
ctx.fillText("mediumseagreen", 60, 25);
ctx.beginPath();
ctx.fillStyle = "rgb(60, 179, 113)";
ctx.fillRect(10, 50, 30, 30);
ctx.fillStyle = "black";
ctx.fillText("rgb(60, 179, 113)", 60, 65);
ctx.beginPath();
ctx.fillStyle = "#3CB371";
ctx.fillRect(10, 90, 30, 30);
ctx.fillStyle = "black";
ctx.fillText("#3CB371", 60, 105);
ctx.beginPath();
ctx.fillStyle = "rgb(23.5%, 70.2%, 44.3%)";
ctx.fillRect(10, 130, 30, 30);
ctx.fillStyle = "black";
ctx.fillText("rgb(23.5%, 70.2%, 44.3%)", 60, 145);
ctx.beginPath();
