首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环时增加JS数组项

循环时增加JS数组项
EN

Stack Overflow用户
提问于 2019-12-11 19:29:50
回答 1查看 65关注 0票数 0

我正在编写一个由黑白方块组成的图形代码(就像一个简化的QRcode)。在HTML画布中,我能够检测到每个正方形的位置和像素。问题是计算每个正方形区域中有多少黑色像素。

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

像素是黑色还是白色?

代码语言:javascript
运行
复制
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];,表示第一个、第三个和第五个方块是白色的,第二个、第四个是黑色的。

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

我尝试了不同的解决方案,但都不起作用:

代码语言:javascript
运行
复制
// 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) }

如何做到这一点?提前谢谢。

*编辑

我的第一个想法(效果很好)是定义一个变量,而不是数组let row_1_1 = 0,然后对于每个黑色像素:if(...black pix...){ row_1_1 +=1 },它工作得很好,但1)我必须手动创建很多变量,2)使用一个数组,我可以循环整个函数。使用var意味着使用自己的var单独探索每个方块。使用数组意味着只需一行代码就可以浏览所有的行方块。

EN

回答 1

Stack Overflow用户

发布于 2019-12-11 21:45:21

它起作用了。

代码语言:javascript
运行
复制
 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%。正方形是黑色的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59284853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档