每次更改后刷新画布

时间:2016-11-24 17:45:04

标签: javascript html5 canvas html5-canvas

我试图将图像内容逐个像素地复制到画布中,我希望在它发生时将其可视化。但是,在进程正在进行时,画布只保持空白,然后在完成时,克隆的图像将完整显示。画布是否有任何方式可以刷新"#34;或者"重新加载"每个像素改变后?

以下是我使用的代码的一部分:

for (var x = 0; x < w; x++) {
    for (var y = 0; y < h; y++) {
        ctx2.putImageData(ctx1.getImageData(x,y,1,1),x,y);
    }
}

...其中ctx1是克隆的原始和ctx2 - 上下文对象的上下文对象。 我对此感兴趣仅用于可视化目的。我知道它可能效率不高。

1 个答案:

答案 0 :(得分:1)

我最终通过使用here描述的setIntervalX函数设法完成了这项工作,延迟时间为1毫秒。逐行绘制,而不是逐像素绘制,但它对我来说足够好,可能更有效。代码可能与Jon在上面的评论中提到的生成器函数更加整洁,但我已经对这个问题做了很长时间的斗争,我只需要一些有用的东西:)

var x = 0;
setIntervalX(function(){drawVerticalLine(ctx1,ctx2,x++,image_height)},1,image_width);

function setIntervalX(callback, delay, repetitions) {
    var r = 0;
    var intervalID = window.setInterval(function () {

       callback();

       if (++r === repetitions) {
           window.clearInterval(intervalID);
       }
    }, delay);
}

function drawVerticalLine(ctx1,ctx2,x,image_height) {
    for (var y = 0; y < image_height; y++) {
        ctx2.putImageData(ctx1.getImageData(x,y,1,1),x,y);
    }
}