Model RGBA
A albo a dodaje do RGB czwarty składnik 'alfa’ określający transparentność (przezroczystość, stopień krycia) koloru.
W JavaScript A jest wyrażane jako liczba zmiennoprzecinkowa od 0.0 – 1.0.
Przezroczystość definiujemy dla ścieżki kontekstu jako globalAlpha
.
Jeżeli liczba A = 1.0 to kolor RGBA jest identyczny z kolorem RGB.
Kolory RGBA można przedstawić podobnie jak kolory RGB, ale kolor alfa jest wyrażony w postaci liczby zmiennoprzecinkowej od 0.0 do 1.0:
rgba(255, 0, 0, 0.5)
Liczba 0 oznacza przezroczystość zupełną (brak krycia), a liczba 1 – pełną nieprzezroczystość (krycie pełne).
Przeliczanie HEX na RGBA
Listing
// zwraca tablice R,G,B,A gdzie A jest liczbą float pomiedzy 0.0 - 1.0 var HexToRGBA = function(hexa) { var R = -1; var G = -1; var B = -1; var A = -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); A = parseInt(hexa.substr(6, 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); A = parseInt(hexa.substr(7, 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); A = parseInt(hexa.substr(8, 2), 16); } } return [ R, G, B, Math.roundToDecimal((A - 0.5) / 255, 4) ]; };
Przeliczanie zRGBA na HEX
Listing
// a jest typu float pomiędzy 0.0 - 1.0 var RGBAToHex = function(r, g, b, a) { var r1 = parseInt(r).toString(16).toUpperCase(); var g1 = parseInt(g).toString(16).toUpperCase(); var b1 = parseInt(b).toString(16).toUpperCase(); var a1 = parseInt(Math.roundToDecimal(a * 255 + 0.5), 4).toString(16) .toUpperCase(); if (r1.length == 1) { r1 = "0" + r1; } if (g1.length == 1) { g1 = "0" + g1; } if (b1.length == 1) { b1 = "0" + b1; } if (a1.length == 1) { a1 = "0" + a1; } return "0x" + r1 + g1 + b1; };
Różne wartości krycia
Listing
var cv = document.getElementById("canvas"); var ctx = cv.getContext("2d"); ctx.save(); ctx.beginPath(); ctx.rect(10, 20, 100, 100); ctx.fillStyle = "green"; ctx.fill(); ctx.globalAlpha = 0.6; ctx.beginPath(); ctx.arc(120, 120, 60, 0, 2 * Math.PI, false); ctx.fillStyle = "red"; ctx.fill(); for (var i = 0; i 7lt; 6; i++) { ctx.beginPath(); ctx.globalAlpha = 0.2 * i; ctx.arc(10 + 80 * i, 250, 60, 0, 2 * Math.PI, false); ctx.fillStyle = "red"; ctx.fill(); } ctx.restore() ctx.fillStyle = "black"; ctx.fillText("0.0", 10 + 80 * 0, 300); ctx.fillText("0.2", 10 + 80 * 1, 300); ctx.fillText("0.4", 10 + 80 * 2, 300); ctx.fillText("0.6", 10 + 80 * 3, 300); ctx.fillText("0.8", 10 + 80 * 4, 300); ctx.fillText("1.0", 10 + 80 * 5, 300);