我只想使用 drawImage()方法在canva上绘制图像,但有时会发生图像未绘制的情况。即使我使用onload事件,它仍然无法显示图像。 在提出问题之前,我只想精确地指出图像是在绘制时而不是在某个时间绘制的。那么,此问题的原因是什么,我该如何解决或修复它。
let imagez = new Image();
imagez.src="photo/run.png";
context.drawImage(imagez,10,10,50,60); // it does not draw the image always. why?
I expect the image to be drawn whenever I refresh the page
答案 0 :(得分:1)
最有可能发生这种情况的原因是,在完全加载实际图像之前调用了 drawImage()方法。 等待它完成加载,然后再调用drawImage()。
var canvas = document.createElement("canvas");
document.body.appendChild(canvas);
canvas.width = 400;
canvas.height = 300;
var context = canvas.getContext("2d");
let imagez = new Image();
imagez.onload = function() {
context.drawImage(imagez, 10, 10, 50, 60);
}
imagez.src = "https://picsum.photos/400/300";
答案 1 :(得分:0)
为此,您必须等待图像加载到内存中之后才能将其绘制到画布上。
一个简单的loadIMAGE()
函数可以实现这一点……
function loadIMAGE(path, x, y, w, h) {
var img = new Image();
img.addEventListener("load", function(e) {
// 'this' === the image Object
context.drawImage(this, x, y, w, h);
}, !1);
img.src = path;
}
// USAGE
loadIMAGE("photo/run.png", 10, 10, 50, 60);
重要的是在分配src
值之前定义事件处理函数。
希望有帮助:)
答案 2 :(得分:0)
您正在尝试绘制图像而不知道图像是否已成功加载...
这是一个使用onload
事件
const canvas = document.getElementById("gameArea");
context = canvas.getContext("2d");
let imagez = new Image();
imagez.onload = function () {
context.drawImage(imagez, 10, 10, 50, 60);
}
imagez.src = "https://upload.wikimedia.org/wikipedia/commons/e/e2/3D_Gyroscope.png";
<canvas id=gameArea></canvas>