gpt4 book ai didi

html - 在 Chrome 上将 drawImage 与 Canvas 一起使用非常慢

转载 作者:太空狗 更新时间:2023-10-29 13:48:28 26 4
gpt4 key购买 nike

我一直在尝试使用 drawImage 将 SVG 文件的大量实例绘制到 Canvas 上。通过使用 SVG 作为源创建单个图像元素,然后对 Canvas 上的每个实例使用 drawImage,我希望即使有大量实例也能在 Canvas 上非常快速地生成合成图像。

就性能而言,这在 Firefox 中运行良好 - 我可以在大约 300 毫秒内绘制 60,000 个实例。但在 Chrome 上它非常慢:16,000 个实例占用了 5 秒多的时间。我已经在 jsfiddle 上放置了一个版本的代码,它演示了 Chrome 上的问题。

下面是我如何调用 drawImage 的示例,其中 Canvas 中填充了尽可能多的 x 大小图像。我读过一条建议,尝试使用第二个隐藏 Canvas 来缓冲所有实例,然后通过一次调用更新可见 Canvas 。但这并没有影响性能,单独的 drawImage 调用似乎仍然使事情陷入困境。

关于出了什么问题以及我可以做些什么来解决它有什么想法吗?

            svgImg = new Image;

can.width = 1800; can.height = 900;
svgImg.onload = function () {
if (internalSize == size)
return;
internalSize = size;
var timeBefore = new Date().getTime();
var tot = 0;

var canWidth = can.width;
var canHeight = can.height;
for (var x = 0; x < canWidth; x += size) {
for (var y = 0; y < canHeight; y += size) {
ctx.drawImage(svgImg, x, y, size, size);
tot++;
}
}
document.getElementById('count').innerHTML = "Total Count: " + tot;
var timeAfter = new Date().getTime();
};
svgImg.src = "http://www.w3.org/Icons/SVG/svg-logo.svg";
svgImg.width = size;
svgImg.height = size;

最佳答案

减速 1:当源 Canvas 或目标 Canvas 在 RAM 中而另一个 Canvas 在 GPU 上时发生。

减速 2: 当 src 和 dest Canvas 大小不同时发生


相关错误:http://code.google.com/p/chromium/issues/detail?id=170021

我注意到了同样的问题,并将案例简化为将一个空白 Canvas 绘制到另一个 Canvas 上。当 Canvas 大小相同时,这似乎不是问题,但在某一点上性能会急剧下降。这是 jspref ,以及我的结果:

jspref chrome results

请注意 255x255 到 100x100 和 260x260 到 100x100 的区别。

关于html - 在 Chrome 上将 drawImage 与 Canvas 一起使用非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com