3

我现在正在使用本教程,并且它运行良好,但我唯一担心的是它有点慢。我有一个 600x600 的画布,当使用填充工具时,填充画布大约需要 2 秒。在 Microsoft Paint 中,填充画布的大小是即时的,填充画布 10 倍的大小(6000x6000)仍然略短,大约为 1 秒。

这只是 javascript 和 canvas 元素的限制,还是可以对其进行优化以接近 MS Paint 等桌面程序的速度?我用 Firebug 对其进行了分析,这个功能似乎是主要瓶颈之一,但它确实必须运行每次迭代,所以..

function matchStartColor(pixelPos, startR, startG, startB) {
    var r = colorLayerData.data[pixelPos];
    var g = colorLayerData.data[pixelPos + 1];
    var b = colorLayerData.data[pixelPos + 2];

    return (r == startR && g == startG && b == startB);
} 
4

2 回答 2

3

MS Paint 是用本机代码(C 或 C++ 转换为机器代码)编写的,它比 canvas/javascript 更快,如果编写正确,渲染效率更高。还要考虑 MS Paint 可能会使用计算机上硬件的视频渲染工具,我认为 canvas 在大多数浏览器中默认情况下不会这样做。

此外,MS Paint 的泛光/填充算法可能与您使用的不同。实现某事的方法总是不止一种。您是否尝试过简单的逐行扫描,边走边填充白色像素吗?您可以尝试一下,只是为了进行基准测试。

于 2012-06-14T19:46:18.620 回答
0

我也跟着这个教程。这个算法不适用于预定义的图像。它只适用于你在画布上绘制的东西。

于 2012-09-09T21:02:27.887 回答