Javascript html5画布是否支持带有alpha的十六进制颜色?
我想知道是否可以用彩色画一个正方形,然后在里面画一个圆 这就像用黑色像素画一个正方形,然后用透明像素画一个圆形 据我所知,十六进制的基本颜色是红色、绿色、蓝色,但它看起来可以有类似于Javascript html5画布是否支持带有alpha的十六进制颜色?,javascript,canvas,hex,Javascript,Canvas,Hex,我想知道是否可以用彩色画一个正方形,然后在里面画一个圆 这就像用黑色像素画一个正方形,然后用透明像素画一个圆形 据我所知,十六进制的基本颜色是红色、绿色、蓝色,但它看起来可以有类似于rgba的格式,但类似于argb的十六进制,00是完全透明的,FF是实心的 在png中,当您可以拥有透明像素时,alpha值也应该转换为十六进制值,作为合法和操纵性的值 带有8个字符的十六进制颜色看起来根本不是标准颜色(通常是6个字符),因为我今天第一次在android应用程序上看到它们,我想知道它们是否合法(需要更
rgba
的格式,但类似于argb
的十六进制,00
是完全透明的,FF
是实心的
在png中,当您可以拥有透明像素时,alpha值也应该转换为十六进制值,作为合法和操纵性的值
带有8个字符的十六进制颜色看起来根本不是标准颜色(通常是6个字符),因为我今天第一次在android应用程序上看到它们,我想知道它们是否合法(需要更好的措辞-如果不清楚,请编辑)
这是合法的颜色吗?它是看不见的,但却是黑色的,正如我所理解的,它是纯黑的:
#FF000000
更新:现代浏览器现在支持8个字符的十六进制颜色,用于CSS和画布
画布和CSS一样,不支持8个字符的十六进制颜色。但是,您可以使用 工作示例:
var cvs=document.getElementById('canvas');
var ctx=cvs.getContext('2d');
ctx.fillStyle='#FF0000';
ctx.fillRect(0,0,100,100);
ctx.fillStyle='rgba(0,255,0,0.5)';
ctx.fillRect(50,50,100,100)代码>
您提到,您知道十六进制颜色可以分解为r、g、b。您可以做的一件事是编写一个允许您使用8字符十六进制代码的函数:
function hex2rgba(hexa){
var r = parseInt(hexa.slice(1,3), 16);
g = parseInt(hexa.slice(3,5), 16);
b = parseInt(hexa.slice(5,7), 16);
a = parseInt(hexa.slice(7,9), 16)/255;
return 'rgba('+r+', '+g+', '+b+', '+a+')';
}
ctx.fillStyle = hex2rgba('#aabbcc99');
//rgba(170, 187, 204, 0.59765625)
你可以用
ctx.fillStlye=“#rrggbbaa”
但它看起来像垃圾,我有一个问题,我称之为染色,如果我在一种颜色上涂上这种颜色,它实际上不会变成那种颜色,会有一种旧颜色的颜色,这真的很讨厌,因为我希望它完全变黑,但它不会。更糟糕的是,alpha越低(我认为alpha只会叠加几次)
你应该改用
ctx.globalAlpha = 0.aa; //aa is in base 10 here! (its a scale from 1.0 to 0.0)
谢谢,这总是让我明白。大多数最新浏览器中的CSS都支持8字符十六进制颜色,如:#00000080