Я разрабатываю приложение Google Chrome, в котором есть холст html5 для отображения изображений. Перед отображением изображения с помощью ctx.drawImage (...), я уверен, что соотношение сторон изображения сохранено и т. Д. Когда размер окна изменяется, я добавил прослушиватель событий и вызов функции для изменения размера холста и изображения, здесь приведены соответствующие фрагменты кода:Как изменить размер изображения холста HTML5 при изменении размера окна
var ctx = document.getElementById('canvas').getContext('2d');
window.onload = function() {
ctx.canvas.width = window.innerWidth-10;
ctx.canvas.height = window.innerHeight-30;
window.addEventListener('resize', resizeCanvas);
};
function resizeCanvas(){
var imgData = ctx.getImageData(0,0, ctx.canvas.width, ctx.canvas.height);
ctx.canvas.width = window.innerWidth-10;
ctx.canvas.height = window.innerHeight-85;
ctx.putImageData(imgData, 0, 0); // Put the image data back onto the canvas
}
Однако это не работает. Кажется, что размер холста изменяется правильно (поскольку я добавил границу на нем, и я могу его отредактировать), но putImageData не обновляет изображение? Любые мысли о том, почему это может произойти?
UPDATE: в соответствии с приведенными ниже предложениями: Я изменил функцию изменения размера, чтобы попытаться изменить масштаб холста - но теперь изображение не отображается на всех разы при изменении размера окна
function resizeCanvas(){
//var imgData = ctx.getImageData(0,0, ctx.canvas.width, ctx.canvas.height);
ctx.scale(ctx.canvas.width/window.innerWidth,ctx.canvas.height/window.innerHeight);
ctx.canvas.width = window.innerWidth-10;
ctx.canvas.height = window.innerHeight-85;
//ctx.putImageData(imgData, 0, 0); // DO I NEED THIS NOW?
}
спасибо!
Вы получаете imagedata перед изменением размера. Установите правильные размеры, получите ImageData? – Leon
__I также считаю, что изображение не должно меняться__, потому что вы получаете одинаковые данные и помещаете их снова. Сами данные изображения должны быть изменены. Вычислите новое соотношение сторон и вместо этого используйте 'ctx.scale()'. – dsharew
Спасибо за предложение, это имеет смысл. Я пробовал ctx.scale, но у меня все еще проблемы. См. Мой обновленный вопрос выше – trican