Мне нужно обработать pixeldata из изображения 1000x1000px * .bmp (~ 1MiB) в javascript
В настоящее время я немного застрял, потому что страница зависает, когда я пытаюсь сбрасывать данные на консоль ,
важный код до сих пор:получить пиксель из растрового изображения
var img = new Image();
img.src = 'image.bmp';
context.drawImage(img, 0, 0);
console.log(context.getImageData(0, 0, canvas.height, canvas.width);
я думаю, что это проблема производительности, но есть лучший способ получить доступ к данным пикселя? Мне действительно не нужно читать все сразу, чтение пикселов по одному тоже будет хорошо.
EDIT:
здесь обновленный код, он будет заполнить 2d-массив с красной стоимости картины (я имею дело с черно/белое изображение, так что то будет достаточно)
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
нет проблем с производительностью :) только причуда, что строки/столбцы перепутаны
Глупый вопрос: Вы пытались сделать это с помощью небольшого изображения, чтобы заставить его работать? – epascarello
Вы сбрасываете * 1 миллион пикселей * на консоль и задаетесь вопросом, почему браузер зависает? Шутки в сторону? –
Pekka: Да, я понял, что это проблема с производительностью, если бы я знал способ доступа к пикселям один за другим, я бы не спросил. – fruight