사용자가 터치/스타일러스를 사용하여 실제로 캔버스에 그릴 수있는 응용 프로그램을 개발 중입니다. 인터페이스의 일부는 전체 화면을 채우기 위해 캔버스의 크기를 늘려 더 많은 부동산을 허용하는 '크기 조정 버튼'입니다.getImageData로 크기 조정 캔버스
현재 캔버스가 확대되면 getImageData 및 putImageData를 사용하여 작은 캔버스를 복사하고 다시 그립니다. 이것은 어느 정도까지 잘 작동합니다.
큰 캔버스에서 그림을 그려 작은 캔버스로 되돌릴 때 자연스럽게 데이터의 일부가 잘리지 않습니다. 다시 말하지만, 문제는 아닙니다. 그러나 캔버스 자체에서 getImageData를 사용할 때 전체 화면으로 다시 전환하려면 더 작은 캔버스에 표시되는 데이터 만 복사합니다. 여기에 문제가 있습니다. 도면 데이터에 상관없이 내가에서 오전 볼 수있는, 남아하는 내가 좋아하는 것이 무엇
이다.
어떤 아이디어?
추신. 실례가 바닐라와 jQuery의 이상한 혼합, 나는 다른 사람의 제안을 신속하게 시도했다.
또한 sizer
은 '크기 조정'버튼입니다. 내 캔버스 ID는 draw
이고 내 캔버스는 right-panel
입니다.
var panelWidth = $(".right-panel").width();
var panelHeight = $(".right-panel").height();
var c = document.getElementById("draw");
var ctx = c.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(0, 0, panelWidth, panelHeight);
$(".sizer").click(function(){
var imgData = ctx.getImageData(0, 0, panelWidth, panelHeight);
$('.right-panel').toggleClass('huge');
var width = $(".right-panel").css("width");
var height = $(".right-panel").css("height");
var el = $("canvas");
el.attr("width", width);
el.attr("height", height);
panelWidth = $(".right-panel").css("width").replace(/[^-\d\.]/g, '');
panelHeight = $(".right-panel").css("height").replace(/[^-\d\.]/g, '');
ctx.fillStyle = "red";
ctx.fillRect(0, 0, panelWidth, panelHeight);
ctx.putImageData(imgData, 0, 0);
});
그림을 전체 해상도 캔버스로 유지하면서 DOM에 추가하지 마십시오. 해당 캔버스에 대한 모든 렌더링을 수행하고 화면 캔버스를보기로 사용하십시오. 이렇게하면 도면에 영향을주지 않고보기를 확대/축소, 이동, 회전 및 크기 조정할 수 있습니다. 'ctx.drawImage'를 사용하여 하나의 캔버스를 다른 캔버스에 그릴 수 있습니다. – Blindman67