Javascript 从位图中获取像素

Javascript 从位图中获取像素,javascript,image,canvas,bitmap,pixel,Javascript,Image,Canvas,Bitmap,Pixel,我需要在javascript中处理1000x1000px*.bmp图像(~1MiB)中的像素数据 目前我有点卡住了,因为当我尝试将数据转储到控制台时,页面冻结。 迄今为止的重要准则是: var img = new Image(); img.src = 'image.bmp'; context.drawImage(img, 0, 0); console.log(context.getImageData(0, 0, canvas.height, canvas.width)); 我想这是一个性能问题

我需要在javascript中处理1000x1000px*.bmp图像(~1MiB)中的像素数据
目前我有点卡住了,因为当我尝试将数据转储到控制台时,页面冻结。
迄今为止的重要准则是:

var img = new Image();
img.src = 'image.bmp';
context.drawImage(img, 0, 0);
console.log(context.getImageData(0, 0, canvas.height, canvas.width));
我想这是一个性能问题,但是有没有更好的方法来访问像素数据?我真的不需要一次读全部,一个接一个地读像素也可以

编辑:

这是更新后的代码,它将用图片的红色值填充一个2d数组(我正在处理一个黑白图片,这样就足够了)

var img=newimage();
img.src='image.bmp';
drawImage(img,0,0);
var imgData=context.getImageData(0,0,canvas.height,canvas.width);
var pixel=新数组();

对于(i=0;i尝试创建一个1px X 1px的画布,移动图像,然后读取图像数据

愚蠢的问题:你是否尝试过先用一个小图像使其工作?你正在向控制台倾倒100万像素,并想知道为什么浏览器会冻结?真的吗?佩卡:是的,我认为这是一个性能问题,如果我知道一种访问方法的话我有一些问题:在$-1行中,它不应该是s/clr/tmr/?,这是什么(x=function(){}());-结构被调用,所以我可以了解更多关于它的信息(谷歌不太擅长使用括号/括号)。我还不会将其标记为答案,因为即使是300fps,这也需要将近1小时。我必须首先测试另一个答案。此外,您的代码有错误:它打印4字节,但只前进1字节,因此输出重叠3字节,最后3个输出将有最后一个值“未定义”,以及它的数据。数据[…]是的,老兄,我承认这是个错误。我是在有点困的时候回答的:)更新了我的帖子。请看我的更新。祝你愉快!
(x=function(){})(;
这是一个自动执行的匿名函数,它启动了该函数。帧速率达到[30fps],您至少可以查看图像数据详细信息,而无需挂断浏览器。我不会请求您接受我的答案,因为如果我的答案被接受,甚至被否决,我什么也得不到:)顺便说一句,欢迎使用stackoverflow.com解决冻结问题,但我认为,如果我不转储到控制台,那么性能就足以直接进行所有计算,而不会冻结。
var data   = context.getImageData(0, 0, canvas.height, canvas.width);
var count  = 0;
var tmr    = null;
var length = data.length; 
(pix = function() { 
    var r = data[count + 0];
    var g = data[count + 1];
    var b = data[count + 2];
    var a = data[count + 3];
    var rgba = 'rgba('  + r + ' ,' + g + ' ,' + b +   ' ,' + a + ')'; 
    console.log(rgba); 
    if((count += 4) >= length) { 
        clearTimeout(tmr);
        return;
    }
    tmr = setTimeout(pix, 1000/30); //at 30 fps
})();
var data   = context.getImageData(0, 0, canvas.height, canvas.width);
var count  = 0;
var tmr    = null;
var length = data.length; 
(pix = function() { 
    var r = data[count + 0];
    var g = data[count + 1];
    var b = data[count + 2];
    var a = data[count + 3];
    var rgba = 'rgba('  + r + ' ,' + g + ' ,' + b +   ' ,' + a + ')'; 
    console.log(rgba); 
    if((count += 4) >= length) { 
        clearTimeout(tmr);
        return;
    }
    tmr = setTimeout(pix, 1000/30); //at 30 fps
})();