Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations
of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix,
including areas used for finder patterns, timing patterns, etc. These areas should be unused
after the point they are unmasked anyway.
Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position
and j is row position. In fact, as the text says, i is row position and j is column position.
values:Map<DataMaskValues, DataMask> = new Map<DataMaskValues, DataMask>([/*** 000: mask bits for which (x + y) mod 2 == 0*/[DataMaskValues.DATA_MASK_000, new DataMask(DataMaskValues.DATA_MASK_000, (i: number /* int */, j: number /* int */) => {return ((i + j) & 0x01) === 0;})],/*** 001: mask bits for which x mod 2 == 0*/[DataMaskValues.DATA_MASK_001, new DataMask(DataMaskValues.DATA_MASK_001, (i: number /* int */, j: number /* int */) => {return (i & 0x01) === 0;})],/*** 010: mask bits for which y mod 3 == 0*/[DataMaskValues.DATA_MASK_010, new DataMask(DataMaskValues.DATA_MASK_010, (i: number /* int */, j: number /* int */) => {return j % 3 === 0;})],/*** 011: mask bits for which (x + y) mod 3 == 0*/[DataMaskValues.DATA_MASK_011, new DataMask(DataMaskValues.DATA_MASK_011, (i: number /* int */, j: number /* int */) => {return (i + j) % 3 === 0;})],/*** 100: mask bits for which (x/2 + y/3) mod 2 == 0*/[DataMaskValues.DATA_MASK_100, new DataMask(DataMaskValues.DATA_MASK_100, (i: number /* int */, j: number /* int */) => {return ((Math.floor(i / 2) + Math.floor(j / 3)) & 0x01) === 0;})],/*** 101: mask bits for which xy mod 2 + xy mod 3 == 0* equivalently, such that xy mod 6 == 0*/[DataMaskValues.DATA_MASK_101, new DataMask(DataMaskValues.DATA_MASK_101, (i: number /* int */, j: number /* int */) => {return (i * j) % 6 === 0;})],/*** 110: mask bits for which (xy mod 2 + xy mod 3) mod 2 == 0* equivalently, such that xy mod 6 < 3*/[DataMaskValues.DATA_MASK_110, new DataMask(DataMaskValues.DATA_MASK_110, (i: number /* int */, j: number /* int */) => {return ((i * j) % 6) < 3;})],/*** 111: mask bits for which ((x+y)mod 2 + xy mod 3) mod 2 == 0* equivalently, such that (x + y + xy mod 3) mod 2 == 0*/[DataMaskValues.DATA_MASK_111, new DataMask(DataMaskValues.DATA_MASK_111, (i: number /* int */, j: number /* int */) => {return ((i + j + ((i * j) % 3)) & 0x01) === 0;})],])
Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix, including areas used for finder patterns, timing patterns, etc. These areas should be unused after the point they are unmasked anyway.
Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position and j is row position. In fact, as the text says, i is row position and j is column position.
Sean Owen