【发布时间】:2020-03-25 09:29:20
【问题描述】:
好的,我正在开发一个绘图应用程序,我想制作它,以便用户可以更改画笔的不透明度。我已经通过更改 alpha 值来改变不透明度,但是当我用降低的 alpha 值绘制一条线时,该线中有许多不同透明度的点。如何使半透明线绘制得非常干净,仅在重叠处偶尔改变透明度?
图 1 是我运行代码时发生的情况
这是我画布的 javascript 代码
const canvas = document.querySelector("#canvas");
const ctx = canvas.getContext('2d');
window.addEventListener('load', function() {
//Resizing
canvas.height = window.innerHeight;
canvas.width = window.innerWidth;
//Variables
let painting = false;
function startPosition(e) {
painting = true;
draw(e);
}
function finishedPosition() {
painting = false;
ctx.beginPath();
}
function draw(e) {
if(!painting) return;
ctx.lineWidth = 10;
ctx.lineCap = "round";
ctx.lineTo(e.clientX, e.clientY);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(e.clientX, e.clientY);
}
//EventListeners
canvas.addEventListener('mousedown', startPosition);
canvas.addEventListener('mouseup', finishedPosition);
canvas.addEventListener('mousemove', draw);
});
【问题讨论】:
-
对于单色,存储所有坐标,清除整个画布并重绘为单个子路径。对于不同的颜色,在屏幕外画布上绘制一次不透明*,然后降低可见画布的 globalAlpha 并在屏幕外画布上绘制图像。 (* 如果你真的只有这些画,你可以使用合成将它们全部放在同一个画布上。
-
啊,好吧,我找到了一些代码,但我真的不明白实际发生了什么。有什么资源可以让我了解更多信息吗?
标签: javascript html canvas drawing