캔버스에 실행 취소 기능을 구현하려고합니다. 기본적으로 사람들은 캔버스에 그림을 그릴 수 있으며 이전 상태로 복원 할 수 있습니다. 그것이 이론입니다. 함수 draw를 호출 할 때마다 현재 imageData를 저장합니다. 배열 eD (네임 스페이스) .history에 저장됩니다. 드로잉은 imageData를 조작하더라도 잘 동작합니다.JS/HTML5 - 배열의 이미지 데이터로 캔버스 다시 그리기
: 지금은 내가 내가 그 모양 취소라는 함수를 사용 사이에서 변경 한 내 변경 사항을 취소하려고하면editorClass.prototype.draw = function(){
eD.history.push(cD.imageData);
cD.context.putImageData(cD.imageData, 0, 0);
}
: 여기 내 드로우 기능입니다 (CD는 네임 스페이스 aswell이다)
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
}
두 개의 네임 스페이스가 모두 표시됩니다. 나는 캔버스에 아주 새로운 해요 때문에, 간단한 질문을 수 있습니다 - 그래서 당신은 개선이있는 경우 : 나는 완강하게 저항 빈 해요, 저를 기입, 나는 '모든 코드를 보지 않고)
감사
안녕하세요, 당신이 생각한 것보다 더 많은 도움을 주셔서 감사합니다. 실제로 작동하고 있습니다. 어제 제 코드를 리팩토링했을 때 저는 캔버스 처리와 관련하여 뭔가 잘못하고 있다고 생각했습니다. 내가 깨달았 던 코드를 보았다. 내 것이 괜찮았다. 그것은 논리에서 오히려 실수였습니다. canvas를 그릴 때 imageData를 저장 했으므로 이미 imageData를 조작 한 후 사용합니다. 내가해야만하는 것은 imageData를 저장하는 것입니다.하지만 조작 된 후에는 아닙니다. 어제 꽤 늦었습니다.) 어쨌든 고마워요! –