我有两张大小不同的画布。我的目标是将用户的绘图从主画布复制到第二个画布,作为缩小版本。到目前为止,drawImage()和scale似乎工作正常,但是第二个画布保留了主绘图的旧版本和新副本。在调用drawImage()之前,我每次都尝试清除它,但这似乎没有任何作用。如何在每次运行该函数时将当前图像复制到我的辅助画布?
$('#hand').dblclick(function(){
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
//var imageData = context.getImageData(0, 0, 100, 100);
var newCanvas = document.getElementById('scaledCanvas');
var destCtx = newCanvas.getContext('2d');
destCtx.clearRect(0, 0, newCanvas.width, newCanvas.height);
destCtx.scale(.5,.5);
destCtx.drawImage(canvas, 0, 0);
});如果需要,我可以包含更多的代码。我还意识到scale一直在被调用;这解释了为什么新复制的图像每次都会变小,所以这可能是另一个问题。
发布于 2013-02-05 12:44:29
实际上,它非常简单,您使用的是所谓的变换(平移、旋转或缩放)。
为了每次都“新鲜”地使用它们,您必须每次保存和恢复画布状态。
$('#hand').dblclick(function(){
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
//var imageData = context.getImageData(0, 0, 100, 100);
var newCanvas = document.getElementById('scaledCanvas');
var destCtx = newCanvas.getContext('2d');
destCtx.clearRect(0, 0, newCanvas.width, newCanvas.height);
//save the current state of this canvas' drawing mode
destCtx.save();
destCtx.scale(.5,.5);
destCtx.drawImage(canvas, 0, 0);
//restore destCtx to a 1,1 scale (and also 0,0 origin and 0 rotation)
destCtx.restore();
});同样重要的是要注意,你可以在调用restore之前推几次,以便使用递归函数等执行许多很酷的几何技巧。
看一下状态和转换的解释:https://developer.mozilla.org/en-US/docs/HTML/Canvas/Tutorial/Transformations
希望这能帮助你更好地理解canvas变换。
https://stackoverflow.com/questions/14698542
复制相似问题