Chrome 31.0 HTML5画布绘制图像
Chrome 31.0 HTML5 Canvas Draw Image
自从下载了当前版本的chrome(版本31.0.1650.57)以来,我完全无法用我的代码在HTML5画布中绘制图像;没有错误,它在寻找资源,他们只是没有画画。我真的很感谢你在这方面的帮助!
var grass_img = new Image();
grass_img.src = 'grass.gif';
grass_img.onload = draw_here(grass_img, (center_x + base_x + xpos), (center_y + base_y + ypos),1);
它出现在几个不同的图像和调用上:
function draw_here(image, x, y, scale){
draw_canv.drawImage(image, x, y, image.width * scale, image.height * scale);
}
X和Y是正确的,刻度也是正确的;调试器没有发现任何编码错误,程序运行良好,直到最新版本的chrome问世。降级铬也不是一种选择。
问题出在这一行:
grass_img.onload = draw_here( /* ... */ );
您似乎认为将函数draw_here分配为onload处理程序。但这并不是这一行真正发生的事情。您真正要做的是立即执行draw_here
,并将该函数的返回值(即undefined
)分配给grass_img.onload
。
试试这个:
grass_img.onload = function() {
draw_here(grass_img, (center_x + base_x + xpos), (center_y + base_y + ypos),1);
}
这将创建一个匿名函数,该函数被分配给onload处理程序。当调用该匿名函数时(将在触发加载事件时发生),它会使用参数调用绘图处理程序。
我解决了这个问题。如果你在每一帧迭代中都声明自己的图像,那么最新版本的Chrome似乎不喜欢这样。(这似乎是以前允许的,但我真的不应该这么做。)如果你在js的顶部,在任何函数之外声明你的图像及其来源,并且只在函数中绘制它们,那么问题就解决了,例如:
var image = new Image();
image.src='image.jpg';
someFunction() {
canvas.drawImage(image,0,0);
}
注意:.src
应始终在.onload
之后调用。否则就会出现很多难以追踪的童车(比如这辆)。特别是如果在解析onload之前加载了图像。您当前接受的解决方案可能由于具有函数开销计时的竞争条件而起作用。
相关文章:
- 画布:逐像素绘制图像并请求动画帧计时
- WebGL绘制图像
- 多重绘制图像后画布清除
- 可以'清除Rect后,不要在画布上绘制图像
- 如何在单页应用程序中重新绘制图像
- 画布中的图像在绘制图像后立即消失
- 使用Canvas绘制图像
- 如何在javascript中在图像上绘制图像(没有CSS和HTML)
- 使用模式在 HTML5/JS 中绘制图像
- 绘制并重新绘制图像以模拟动画是行不通的
- Dart Canvas未绘制图像
- 在新窗口中打开时,未在画布中绘制图像
- 在画布上绘制图像并导出打印质量的图像
- 用一个加载项绘制图像阵列
- html画布绘制图像不起作用
- Chrome 31.0 HTML5画布绘制图像
- 用HTML5和Javascript绘制图像
- 在新框架上绘制图像,同时仍然使用P5.js中的利萨茹曲线
- 如何在画布上更快地绘制图像
- 在 HTML5 画布中绘制图像,同时保留图像