static recordPattern(row, start, counters) {
			const numCounters = counters.length;
			for (let index = 0; index < numCounters; index++)
				counters[index] = 0;
			const end = row.getSize();
			if (start >= end) {
				throw new NotFoundException();
			}
			let isWhite = !row.get(start);
			let counterPosition = 0;
			let i = start;
			while (i < end) {
				if (row.get(i) !== isWhite) {
					counters[counterPosition]++;
				}
				else {
					if (++counterPosition === numCounters) {
						break;
					}
					else {
						counters[counterPosition] = 1;
						isWhite = !isWhite;
					}
				}
				i++;
			}
			// If we read fully the last section of pixels and filled up our counters -- or filled
			// the last counter but ran off the side of the image, OK. Otherwise, a problem.
			if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) {
				throw new NotFoundException();
			}
		}
Records the size of successive runs of white and black pixels in a row, starting at a given point.
The values are recorded in the given array, and the number of runs recorded is equal to the size
of the array. If the row starts on a white pixel at the given start point, then the first count
recorded is the run of white pixels starting from that point; likewise it is the count of a run
of black pixels if the row begin on a black pixels at that point.

@param row row to count from
@param start offset into row to start at
@param counters array into which to record counts
@throws NotFoundException if counters cannot be filled entirely from row before running out
 of pixels