从画布获得y位置是错误的

时间:2017-04-23 05:30:49

标签: html arrays canvas coordinates

有时y坐标大于imagedata的高度。任何人都可以帮我找到我的错误! 宽度为320像素,高度为240像素。 这是我的代码:

function countPixels(context) {
    var nAlive = 0,
        all = [];
    var w = canvas.width;
    var p = context.getImageData(0, 0, canvas.width, canvas.height).data;
    for (var y = 0, i = 0; y < canvas.height; y++)
        for (var x = 0; x < canvas.width; x++, i += 4) {
            if (p[i] == 255 || p[i + 1] == 255 || p[i + 2] == 255) //Not black
            {
                nAlive++;
                var xc = i % w;
                var yc = parseInt(i / w, 10);
                var pos = {};
                pos.x = xc;
                pos.y = yc;
                all.push(pos);
            }
        }
    var percent = ((canvas.width * canvas.height) / 100) * nAlive;
    console.log("Count: " + nAlive + ",percent: " + percent + ",all: " + JSON.stringify(all));
    // $("#notifies").append("Count: "+nAlive+",percent: "+ percent+",all: "+JSON.stringify(all));
    return {
        percentage: parseFloat(percent),
        positions: all
    };
}

这是函数调用:

var tmp = countPixels(ctx2);
ctx2.strokeStyle = "blue";
$.each(tmp.positions, function(i, value) {
    // if (ctx2.isPointInPath(value.x, value.y))
    $('div').eq(0).append("i: " + i + " " + value.x + ", " + +value.y + '</br>');
    ctx2.rect(value.x, value.y, 5, 5);
});
ctx2.stroke();

0 个答案:

没有答案