循环时增加JS数组项目

问题描述 投票:0回答:1

我正在研究由黑白方块组成的图形代码(例如简化的QRcode)。在HTML画布中,我能够检测到每个正方形位置和像素。概率是要计算每个方形区域中存在多少个黑色像素。

说我的代码是5x3正方形。我为每一行创建一个数组:row_1 = [0,0,0,0,0];

像素是黑色还是白色?

for (let i = 0, j = pix.length; i < j; i += 4) {
    if(pix[i+0] + pix[i+1] + pix[i+2] < 30) { /* add 1 to array */ }
}

一旦正方形被完全扫描,则数组应看起来像row_1 = [20,1580,0,1250,40];,表示第1,第3和第5个正方形为白色,而第2,第4个正方形为黑色。

最终值应为0(白色)和1600(40x40),但电话摄像头捕获的代码可能不完全是水平/垂直的。

我尝试了不同的解决方案,但没有一个起作用:

// first square is [0]
if(pix[i+0] + pix[i+1] + pix[i+2] < 30) { row_1[0] +=1 }
if(pix[i+0] + pix[i+1] + pix[i+2] < 30) { row_1[0] = row_1[0]+1 }
if(pix[i+0] + pix[i+1] + pix[i+2] < 30) { row_1[0].splice(0, 1, row_1[0]+1) }

如何实现?预先感谢。

****编辑

我的第一个想法(运作良好)是定义一个var而不是数组let row_1_1 = 0,然后为每个黑色像素定义:if(...black pix...){ row_1_1 +=1 }它工作正常,但是1)我必须手动创建很多var,2)使用数组可以循环整个函数。使用var表示分别探索每个正方形及其结果。使用数组意味着仅用一行代码即可探索所有行平方。

javascript arrays canvas
1个回答
0
投票

有效。

 let row_1 = [ 0,0,0,0,0 ];

 let imgctx = ctx.getImageData(0, 0, cameraCanvas.width, cameraCanvas.height);
 let pix = imgctx.data;

 for (let i = 0, j = pix.length; i < j; i += 4) {
    if( ... condition to detect the 1st row in canvas... ) {
        for (let c = 0, l = 5; c < l; c ++) { // loop for 5 squares
            if( ...condition for each square: left and width... ) { 
                if(pix[i+0] + pix[i+1] + pix[i+2] < 30) { row_1[c] +=1; }
            }
        }
    }
 }
 alert("1st row = "+row_1) // -> [0,1552,53,1492,112]

然后循环数组,Math.round((1552/1600)*100)给出每个正方形中黑色像素的百分比= 97%。正方形是黑色的。

© www.soinside.com 2019 - 2024. All rights reserved.