【发布时间】:2011-05-08 10:35:45
【问题描述】:
我需要在 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));
我猜这是一个性能问题,但有没有更好的方法来访问像素数据?我真的不需要一次全部读取,逐个读取像素也可以。
编辑:
这是更新后的代码,它将用图片的红色值填充二维数组(我正在处理黑白图片,这就够了)
var img = new Image();
img.src = 'image.bmp';
context.drawImage(img, 0, 0);
var imgData = context.getImageData(0, 0, canvas.height, canvas.width);
var pixel = new Array();
for(i=0;i<canvas.height;i++){
pixel[i] = new Array();
for(j=0;j<canvas.width;j++){
pixel[i][j] = imgData.data[i*canvas.width+j*4];
}
}
//now pixel[y][x] contains the red-value of the pixel at xy in img
没有性能问题 :) 唯一的怪癖是行/列颠倒了
【问题讨论】:
-
愚蠢的问题:你有没有试过先用一个小图像来让它工作?
-
您正在将 100 万像素 转储到控制台并想知道为什么浏览器会死机?认真的吗?
-
Pekka:是的,我认为这是一个性能问题,如果我知道一种逐个访问像素的方法,我就不会问了。
标签: javascript image canvas bitmap pixel