我正在尝试为画布实现撤消功能。基本上人们可以在画布上绘画,然后将其恢复到之前的状态。这就是理论。每次调用函数 draw 时,我都会保存当前的 imageData。它保存在数组 eD(namespace).history 中。绘图工作正常,即使我操作 imageData。这是我的绘图函数(cD 也是一个命名空间):
editorClass.prototype.draw = function(){
eD.history.push(cD.imageData);
cD.context.putImageData(cD.imageData, 0, 0);
}
现在,如果我尝试撤消我在两者之间所做的更改,我会使用一个名为 undo 的函数,它看起来像这样:
editorClass.prototype.undo = function(){
var temp = eD.history.pop();
cD.context.createImageData(cD.width,cD.height); //Can leave this out, nothing changes
cD.context.putImageData(temp, 0, 0);
}
如上所述,这是行不通的。我使用的画布是在用户加载网站后创建的。cD.imageData 源自此函数:
editorClass.prototype.getPixels = function(){
cD.imageData = cD.context.getImageData(0, 0, cD.width, cD.height);
// get the image data of the context and save them into namespace
cD.pixels = cD.imageData.data;
// get the pixels
cD.pixelsLength = cD.width * cD.height * 4;
// precompute the length of the pixel array
}
如果需要,两个命名空间都是可见的。由于我对画布还很陌生,所以这可能是一个简单的问题 - 所以如果你有改进:我是一个空的,请填写我;)
谢谢