javascript - Alpha 混合永远不会在 HTML Canvas 中达到不透明颜色
问题描述
背景
我正在实现一个动画,它需要根据移动对象的速度在移动对象后面留下轨迹。人们长期使用的最简单的方法是绘制对象,然后fillRect()
使用小的 alpha 值(~5%)定期使用背景颜色绘制场景。
问题
似乎永远无法达到真正的不透明颜色。在我测试的每个浏览器(FF、Chrome、Safari)中,它都停在rgba(12,0,0,1)
:
const ctx = document.getElementById('canvas').getContext('2d');
const count = document.getElementById('count');
const color = document.getElementById('color');
ctx.fillStyle = 'rgb(255,0,0)';
ctx.fillRect(0, 0, 100, 100);
var counter = 0;
ctx.fillStyle = 'rgba(0,0,0,0.04)';
window.setInterval(() => {
ctx.fillRect(0,0,100,100);
count.textContent = ++counter;
const d = ctx.getImageData(50, 50, 1, 1).data;
color.textContent = `${d[0]}, ${d[1]}, ${d[2]}, ${d[3] / 255}`;
}, 50);
<canvas id="canvas"></canvas><br/>
Count: <span id="count">?</span><br/>
rgba(): <span id="color">?</span>
解决方案?
这个问题似乎早在 2011 年就被描述为没有解决方案(像素操作导致不可接受的 CPU 使用率)。
- 我错过了什么吗?
- 这是一种预期的行为,因为它在所有浏览器中都如此一致?
- 除了将背景设置为非黑色之外,还有什么聪明的方法吗?
解决方案
推荐阅读
- java - 如何从 Java 中的父类创建一些对象以存储在 arrayList 中,这是子类的属性?
- postgresql - Postgresql 11 如何根据时间戳重新排序数据库中的物理行
- dart - 未来构建器获取数据后如何更新其他小部件
- python - Pandas:如何用该列的平均值替换列中的零值,对于所有具有零值的列
- html - 在内容上重叠页脚行
- algorithm - 从最大化适应度函数的矩阵中选择列表
- android - Android:如何处理多个帐户入口点
- javascript - 无法根据文本中的特定字符过滤按钮
- labview - 如何辨别LabVIEW在做什么
- python - urllib3 中没有默认密码属性?