我正在使用带有javascript的Canvas对象。只是做一些测试,看看我可以在绘制循环中设置像素的速度有多快。最佳像素绘制速度?
在mac上,它在FF,safari,chrome中效果很好。在windows上,我对FF和chrome产生了闪烁的效果。它看起来像在不同的浏览器在Windows上的画布实现不同于在Mac上的画布实现? (不知道这是真的)。
这是基本的代码,我用做图(从下面的文章拍摄 - 我已经优化了以下收紧平局循环,现在运行得流畅):
var canvas = document.getElementById('myCanvasElt');
var ctx = canvas.getContext('2d');
var canvasData = ctx.getImageData(0, 0, canvas.width, canvas.height);
for (var x = 0; x < canvasData.width; x++) {
for (var y = 0; y < canvasData.height; y++) {
// Index of the pixel in the array
var idx = (x + y * canvas.width) * 4;
canvasData.data[idx + 0] = 0;
canvasData.data[idx + 1] = 255;
canvasData.data[idx + 2] = 0;
canvasData.data[idx + 3] = 255;
}
}
ctx.putImageData(canvasData, 0, 0);
再次,Windows上的浏览器会闪烁一下。它看起来像画布实现尝试在下一个绘制操作发生之前将画布清除为白色(这在mac上不会发生)。我想知道是否有一个设置可以在Canvas对象中修改该值(双缓冲,在绘制之前清除等)?
这是我使用作为参考的文章: http://hacks.mozilla.org/2009/06/pushing-pixels-with-canvas/
感谢
是的,我猜这是没有什么可以做的 - 没有办法告诉Canvas改变浏览器实现重绘的方式,对吗?像canvas.pleaseDoubleBuffer =“true”标志? – user246114
或者我的意思是 - 看起来好像某些实现上的画布在每次画画之后都被擦除为白色 - 如果可以关闭,则全部都是完美的。不要以为有这样的事情可以这样做。 – user246114
不幸的是,我不知道如何控制画布使用底层操作系统API。 –