我正在使用 HTML5 画布制作绘图应用程序。要在主画布上绘画,我调用 drawImage() 并将包含画笔图像的单独画布的内容粘贴到鼠标位置。
我可以设置画笔画布的不透明度,当您绘制时,您可以清楚地看到实例堆叠并混合在一起,就像它们应该的那样。当不透明度设置为较低的值(例如 0.01)时,就会出现问题。你可以在一个地方涂鸦一段时间,但它永远不会完全收敛到画笔颜色。笔刷颜色为#000000 时,它将在#2a2a2a 处停止堆叠。
对此我能做些什么吗?这是一个示例应用程序。
<head>
<style type="text/css">
#canvas1 {
border: 1px solid #000;
}
#canvas2 {
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas id="canvas1" width="300" height="300">
</canvas>
<canvas id="canvas2" width="20" height="20">
</canvas>
<script type="text/javascript">
var elem1 = document.getElementById("canvas1");
var elem2 = document.getElementById("canvas2");
var context1 = elem1.getContext("2d");
var context2 = elem2.getContext("2d");
var drawing = false;
init();
function init() {
//draw brush
var alpha = 0.01; //opacity of the brush
context2.fillStyle = "rgba(0, 0, 0, " + alpha + ")";
context2.beginPath();
context2.arc(10, 10, 10, 0, Math.PI*2, true);
context2.closePath();
context2.fill();
elem1.addEventListener("mousedown", function(){startdraw()});
elem1.addEventListener("mouseup", function(){enddraw()});
elem1.onmousemove = draw;
}
function startdraw() {
drawing = true;
}
function enddraw() {
drawing = false;
}
function draw(ev) {
if(drawing) {
context1.drawImage(elem2, ev.pageX - this.offsetLeft - 10, ev.pageY - this.offsetTop - 10);
}
}
</script>
</body>