Установка свойств ширины или высоты холста приводит к очистке холста.Четный canvas.width = canvas.width
;заставит вас потерять все на холсте.Иногда это желательно, но в вашем случае, вероятно, нет.
Что вам, вероятно, понадобится сделать, это примерно так:
var myCanvas = document.getElementById('myCanvas');
var tempCanvas = document.createElement('canvas');
tempCanvas.width = myCanvas.width;
tempCanvas.height = myCanvas.height;
// save your canvas into temp canvas
tempCanvas.getContext('2d').drawImage(myCanvas, 0, 0);
// resize my canvas as needed, probably in response to mouse events
myCanvas.width = newWidth;
myCanvas.height = newHeight;
// draw temp canvas back into myCanvas, scaled as needed
myCanvas.getContext('2d').drawImage(tempCanvas, 0, 0, tempCanvas.width, tempCanvas.height, 0, 0, myCanvas.width, myCanvas.height);
В большинстве браузеров масштабирование выполняется с помощью алгоритма бикубического масштабирования, в результате чего оно становится размытым.В некоторых случаях вы можете установить свойство CSS, чтобы вызывать ближайшего соседа на холсте, если хотите, но поддержка браузера для этого очень неочевидна.Вместо этого вы можете вручную выполнить масштабирование ближайшего соседа, как показано в этом вопросе: Как растянуть изображения без сглаживания
Альтернативный подход CSS
Другой подход заключается в масштабировании холстаиспользуя CSS.В Chrome / Safari / IE вы можете просто сделать:
<canvas style="zoom:200%" />
В Firefox вы можете использовать масштабное преобразование для достижения того же эффекта:
<canvas style="-moz-transform:scale(2)" />
Во многих отношениях этот подходпроще, но у него есть свои небольшие ошибки и специфические особенности браузера.