我试图找到图像中包含数据的第一个垂直和水平行。
我很容易得到第一个水平行,因为在调用 时getImageData
,生成的像素数据数组是逐行水平存储的。我有这样的数据:
var data = context.getImageData(0, 0, width, height).data;
var heightFirst = 0;
for (var r = 0; r <= data.length; r += 4) {
if (data[r + 3] > 0) {
var y = (r / width) / 4;
heightFirst = y;
break;
}
}
我现在需要垂直迭代数据。我意识到这可能是使用嵌套的 for 循环并执行以下操作来完成的:
for (var r = 0; r <= data.length; r += 4) {
for (var c = 0; c < canvasHeight; c++) {
if (data[(r + 3) + (c * width)] > 0) {
}
}
}
我不确定确切的实施/计算有人可以帮我吗?
编辑
正如@bobbybee 和@danielpolencic 所提到的,以4 * 宽度递增的循环将增加一个垂直列:
for (var r = 0; r <= data.length; r += (4 * width)) {
if (data[r + 3] > 0) {
// do whatever
}
}
但是,这只获取第一列像素的信息。我想下一步是重复上面的循环,但将其增加列数(由于颜色数据而乘以 4),循环如下:
for (var c = 0; c < canvas.width; c ++) {
for (var r = 0; r <= data.length; r += ((4 * canvas.width) + (c * 4))) {
if (data[r + 3] > 0) {
firstX = c;
}
}
}
这似乎不太对劲。我把它放在这个 fiddle上,你可以看到它应该返回 10,因为这是从左边算起的第一列,但它正在将 99 写入日志。感觉离我很近!