Necesito procesar pixeldata de una imagen 1000x1000px * .bmp (~ 1MiB) en javascript
Por el momento estoy un poco atascado, porque la página se congela cuando trato de volcar los datos a la consola .
el código importante hasta el momento:obtener píxeles del mapa de bits
var img = new Image();
img.src = 'image.bmp';
context.drawImage(img, 0, 0);
console.log(context.getImageData(0, 0, canvas.height, canvas.width);
supongo que esto es un problema de rendimiento, pero hay una mejor manera de acceder a los datos de píxeles? Realmente no necesito leerlo todo de una vez, leer los píxeles uno por uno también estaría bien.
EDIT:
aquí está el código actualizado, rellenará un 2d-matriz con el rojo-valor de la imagen (estoy tratando con un cuadro negro/blanco, así que eso es suficiente)
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
no hay problemas de rendimiento :) única peculiaridad es que las filas/columnas se invierten
Pregunta tonta: ¿Has intentado hacerlo primero con una imagen pequeña para que funcione? – epascarello
Está descargando * 1 millón de píxeles * a la consola y preguntándose por qué el navegador se bloquea? ¿Seriamente? –
Pekka: Sí, pensé que era un problema de rendimiento, si supiera cómo acceder a los píxeles uno por uno, no lo habría preguntado. – fruight