我正在为网页上的画布编写一张SDR接收器的“瀑布”图。
画布大小为w = 1000 h = 800像素。 顶部行每50毫秒从服务器传送一次。 浏览器(使用JavaScript)必须将所有行向下移动一行,然后在顶部插入新行。这给人以瀑布的外观,其中所有像素都从上到下移动。
它能正常工作,但像素移动的CPU负载非常高,对于树莓派等设备来说太高了。
我正在做的是:
var imagedata = context.getImageData(0,0,pixwidth,height-1);
var dataCopy = new Uint8ClampedArray(imagedata.data);
for(i=(dataCopy.length - (2*pixwidth*4)); i>= 0; i--) {
dataCopy[i+ pixwidth*4] = dataCopy[i];
}
imagedata.data.set(dataCopy);
// insert new top line
// ....
context.putImageData(imagedata, 0, 0);
我还尝试直接复制imagedata[some index]中的像素数据,但性能几乎相同。
在另一个C程序中,我用简单的memcpy操作做了同样的事情,这非常快。但在Javascript中该怎么办呢?有800,000个像素,共3,200,000字节。如何在Javascript中以最佳性能复制或移动它们?
drawImage(cv,0,10)
。 - Kaiidoctx.drawImage(cv, 0, 10)
,其中cv是当前在画布上可见的图像,在y轴上向下移动10个像素进行绘制。就像拍摄当前画布的照片,将其向下移动10个像素,插入新行等等。 - iacobalin