Компьютеры быстрые . Мне кажется, достаточно быстро пересчитать количество пикселей по определенному альфа-каналу в каждом кадре при рисовании. Попробуйте сами здесь: http://jsfiddle.net/ZC8cB/3/
Соответствующий код:
var w = canvas.attr('width'),
h = canvas.attr('height'),
area = w * h;
function updateArea() {
var data = context.getImageData(0, 0, w, h).data;
for (var ct=0, i=3, len=data.length; i<len; i+=4) if (data[i]>50) ct++;
$fill.html(ct);
$pct.html((100 * ct / area).toFixed(2));
}
Если это действительно слишком медленно, вы можете обновить область при каждом другом движении мыши, при каждом третьем движении мыши и т. Д. Или в интервальном таймере. Например, вот очень слегка измененная версия, которая обновляет только каждое десятое движение мыши: http://jsfiddle.net/ZC8cB/4/
И если один кадр подсчета слишком медленный - потому что у вас медленный компьютер или огромный холст или оба - тогда вы можете получить ImageData в одном кадре, и каждый кадр обновления подсчитывает определенную часть пикселей.