在尝试了合成操作和在画布上绘制图像后,我现在试图删除图像和合成。我怎么做呢?
我需要清除画布重绘其他图像;这可能会持续一段时间,所以我不认为每次都画一个新的矩形是最有效的选择。
在尝试了合成操作和在画布上绘制图像后,我现在试图删除图像和合成。我怎么做呢?
我需要清除画布重绘其他图像;这可能会持续一段时间,所以我不认为每次都画一个新的矩形是最有效的选择。
当前回答
使用clearRect方法通过传递x,y坐标和画布的高度和宽度。ClearRect将清除整个画布:
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height);
其他回答
现在有一个.reset()方法,它不仅会清除画布缓冲区,还会完全重置上下文的所有属性(样式等),重置它的转换矩阵,清除它的当前子路径,清除它的状态堆栈(由save()和restore()控制),并删除所有的剪辑区域。
context.reset();
// now 'context' is clear as new
基本上,它具有与canvas相同的效果。Width += 0,除了它更习惯。
然而,在当前的Chromium实现中,它似乎和canvas一样慢。Width += 0时,它也会生成一个新的缓冲区,而不是简单地清除前一个缓冲区(导致更多的内存垃圾)。另一个警告是,它目前只在铬浏览器中支持。 虽然要填充它,你可以去Chrome的方式
if (!CanvasRenderingContext2D.prototype.reset) {
CanvasRenderingContext2D.prototype.reset = function() {
this.canvas.width += 0;
};
}
if (!OffscreenCanvasRenderingContext2D.prototype.reset) {
OffscreenCanvasRenderingContext2D.prototype.reset = function() {
this.canvas.width += 0;
};
}
最快的方式:
canvas = document.getElementById("canvas");
c = canvas.getContext("2d");
//... some drawing here
i = c.createImageData(canvas.width, canvas.height);
c.putImageData(i, 0, 0); // clear context by putting empty image data
如果你只使用clearRect,如果你在一个表单中提交你的图纸,你会得到一个提交而不是清除,或者可能它可以先清除,然后上传一个无效的图纸,所以你需要在函数的开头添加一个preventDefault:
function clearCanvas(canvas,ctx) {
event.preventDefault();
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
<input type="button" value="Clear Sketchpad" id="clearbutton" onclick="clearCanvas(canvas,ctx);">
希望它能帮助到别人。
Context.clearRect(starting width, starting height, ending width, ending height);
例如:上下文。clearRect(0,0, canvas.)宽度,canvas.height);
我总是用
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
对于自定义颜色,和
ctx.clearRect(0, 0, canvas.width, canvas.height);
用于使画布透明时清除