データが含まれている画像の最初の垂直および水平行を見つけようとしています。
を呼び出す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;
}
}
}
これはあまり正しくないようです。ご覧のとおり、これは左から最初の列であるため、10 を返す必要がありますが、ログには 99 が書き込まれています。私がとても近くにいるように感じます!