我有一个缓存的Shape和一个由该形状的cacheCanvas制成的位图。现在,我想将另一个位图绘制到cacheCanvas或更具体地,将另一个位图的cacheCanvas绘制到形状的cacheCanvas。我尝试了bitmap2.draw(shape.cacheCanvas),但是它不起作用-即使draw()说它收到了一个ctx,而且我认为形状的cacheCanvas是一个ctx。它给了我drawImage不是函数错误。
我这样做的原因是为了绘图工具的撤消功能。我绘制形状并使用sourceover将其涂抹到要显示的位图和缩略图位图上,因为存在多个图层。在按下时,我从形状的cacheCanvas存储了一个新的位图,并将其缓存以记住撤消状态。这些在每次加压时都会给我绘图。要撤消,我想清除图形并在没有sourceover的情况下对其进行缓存,然后将撤消Bitmap绘制到形状的缓存画布中。这样可以保持原始形状,原始位图和拇指位图之间的关系。它正在绘制到形状的cacheCanvas,这就是问题所在。有办法吗?谢谢!
已添加-我想我找到了一种解决方法。我可以从一个带有形状的容器开始。然后将容器映射到位图。然后,当我想返回到某个存储的位图时,可以清除形状图形并将该位图添加到容器中-将其变薄并删除存储的位图。知道是否还有一种方法可以将除缓存对象以外的内容写入到cacheCanvas中。
答案 0 :(得分:1)
仅绘制到缓存画布上是不够的,您必须确保更新绘制它的舞台。
给予您更多控制权的另一种方法是将cacheCanvas包装在另一个Stage中。这使您可以使用与EaselJS阶段相同的控件向其中添加内容。请注意,更新时它将清除缓存的原始内容,因此它不是一个完美的解决方案。 https://jsfiddle.net/lannymcnie/8yczqt05/
var stage2 = new createjs.Stage(s.cacheCanvas);
stage2.autoClear = false; // Keep the current cache. Just for this demo
var s2 = new createjs.Shape();
s2.graphics.f("blue").dc(50,50,50);
stage2.addChild(s2);
stage2.update();
如果要创建撤消/重做系统,则可以考虑使用更强大的解决方案,而不是依赖Shape的缓存。听起来您已经在探索用于缓存的容器,希望您能成功。
干杯!