crossCheckHorizontal(startJ /*int*/, centerI /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {
			const image = this.image;
			const maxJ = image.getWidth();
			const stateCount = this.getCrossCheckStateCount();
			let j = startJ;
			while (j >= 0 && image.get(j, centerI)) {
				stateCount[2]++;
				j--;
			}
			if (j < 0) {
				return NaN;
			}
			while (j >= 0 && !image.get(j, centerI) && stateCount[1] <= maxCount) {
				stateCount[1]++;
				j--;
			}
			if (j < 0 || stateCount[1] > maxCount) {
				return NaN;
			}
			while (j >= 0 && image.get(j, centerI) && stateCount[0] <= maxCount) {
				stateCount[0]++;
				j--;
			}
			if (stateCount[0] > maxCount) {
				return NaN;
			}
			j = startJ + 1;
			while (j < maxJ && image.get(j, centerI)) {
				stateCount[2]++;
				j++;
			}
			if (j === maxJ) {
				return NaN;
			}
			while (j < maxJ && !image.get(j, centerI) && stateCount[3] < maxCount) {
				stateCount[3]++;
				j++;
			}
			if (j === maxJ || stateCount[3] >= maxCount) {
				return NaN;
			}
			while (j < maxJ && image.get(j, centerI) && stateCount[4] < maxCount) {
				stateCount[4]++;
				j++;
			}
			if (stateCount[4] >= maxCount) {
				return NaN;
			}
			// If we found a finder-pattern-like section, but its size is significantly different than
			// the original, assume it's a false positive
			const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +
				stateCount[4];
			if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= originalStateCountTotal) {
				return NaN;
			}
			return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, j) : NaN;
		}
<p>Like {@link #crossCheckVertical(int, int, int, int)}, and in fact is basically identical,
except it reads horizontally instead of vertically. This is used to cross-cross
check a vertical cross check and locate the real center of the alignment pattern.</p>