0

所以我想要实现的是使用 color/fillRect 或 clearRect 绘制一个矩形,然后将其复制到我正在绘制的那个画布层下的另一个画布层。另外我想为这个图层设置一个不透明的背景。

我试过的是用 fillStyle 和 fillRect 设置背景,效果很好。我也可以在没有背景的上部画布上用fillRect绘制矩形,然后用drawImage将矩形复制到另一个。

问题是当我尝试使用 clearRect 创建一个矩形并复制它时。正如我注意到的,我只能用另一个矩形来清除矩形。但是我必须为上部画布设置一个背景,这没关系,但是当我将它复制到另一个画布时,它每次都变得越来越暗(当然......)

那么这怎么可能呢?

4

2 回答 2

1

当您使用 Alpha 通道时,您会注意到,Alpha 通道值只要alpha < 255. “重置”的唯一方法是重新开始。

这里有几个选项可以解决这个问题 -

选项1

不要将任何东西从草稿画布复制到主画布,而是将所有点和形状存储到二维数组或由形状对象及其点、颜色、线宽等组成的数组中。

当您需要更新主画布时,清除两个画布,然后将所有形状重新渲染到主画布。

选项 2

如果假设主画布上的所有形状都具有相同的不透明度,则使用第三个屏幕外画布。将所有内容绘制到这个不透明的画布上(最后一点很重要)。

更新主画布时清除它,设置globalAlpha它,然后将屏幕外画布绘制到它。

于 2013-07-24T20:53:52.593 回答
0

所以我们可能需要一些示例代码,因为我不能 100% 确定你想做什么......你使用 2 个画布对象,在顶部画布上绘图,然后将其复制到底部画布......类似于?:

 ctx2.drawImage(canvas1,0,0);

然后你清除顶部画布:

 ctx1.clearRect(0,0,canvas1.width,canvas1.height);

并再次做你的绘画程序?你是想获得某种轨迹效果还是什么?

于 2013-07-24T19:12:18.990 回答