可以在Canvas HTML5中将Alpha透明度填充或描边样式与RGB分开设置吗?

| 在Canvas / HTML5中,我知道您可以使用RGBA来为fillStyle或strokeStyle设置颜色和Alpha透明度。您也可以仅使用RGB设置没有alpha通道的颜色。有没有一种方法可以在不提供颜色的情况下更改项目的Alpha值。 我的示例将要更改颜色随机或不再已知的画布部分上方的fillStyle或strokeStyle。有没有一种方法可以通过其他属性或不向颜色传递任何内容来更改alpha(例如ctx.fillStyle = \'rgba(,,, alphaValue)\';)     
已邀请:
        有几种方法。 首先,上下文的“ 0”属性。 如您在标题中所要求的,它将允许独立于填充或描边设置透明度。 然后,您可以在一个点上使用
getImageData
查找颜色并保存该信息,用
clearRect
清除该区域,设置
globalAlpha
,然后使用保存的颜色重画该区域。 当然,您根本不需要
globalAlpha
。您也可以执行上述操作,而不是设置全局Alpha,只需修改您保存的颜色的Alpha。 如果要使较大的复杂画布区域更加透明,则需要更改globalAlpha,然后使用drawImage将画布绘制到自身上。 这是一个例子。我绘制两个矩形,然后使它们之间的矩形区域更透明。     
        您可以使用一个函数从为感兴趣的样式设置的任何内容中提取RGB值,然后将其设置为所需的alpha:
var rgb = hexToRgb(canvasCtx.fillStyle);
canvasCtx.fillStyle = \"rgba(\" + rgb[\"r\"] + \",\" +rgb[\"g\"] + \",\" + rgb[\"b\"] + \",0.2)\";
您可以像从另一个答案中获取的那样使用hexToRgb函数:
function hexToRgb(hex) {
    // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")
    var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;
    hex = hex.replace(shorthandRegex, function(m, r, g, b) {
        return r + r + g + g + b + b;
    });

    var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);
    return result ? {
        r: parseInt(result[1], 16),
        g: parseInt(result[2], 16),
        b: parseInt(result[3], 16)
    } : null;
}
    

要回复问题请先登录注册