【发布时间】:2023-03-22 14:54:01
【问题描述】:
我正在设计一个谷歌浏览器应用程序,它有一个用于显示图像的 html5 画布。在通过 ctx.drawImage(...) 显示图像之前,我确保图像的纵横比被保留等。当调整窗口大小时,我添加了一个事件侦听器和一个函数调用来调整画布和图像的大小,这里是相关代码sn-ps:
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 没有更新图像?关于为什么会发生这种情况的任何想法?
更新:根据以下建议: 我更改了调整大小功能,尝试重新调整画布 - 但现在调整窗口大小后,图像根本不显示
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 ?
-
我也相信图像不应该改变,因为你得到了相同的数据并重新放置。图像数据本身必须调整大小。计算新的纵横比并改用
ctx.scale()。 -
感谢您的建议,很有道理。我已经尝试了 ctx.scale,但仍然有问题。请参阅上面的更新问题
标签: javascript html canvas google-chrome-app