public static IsValidMaskPattern ( int maskPattern ) : bool | ||
maskPattern | int | |
Résultat | bool |
// Return the mask bit for "getMaskPattern" at "x" and "y". See 8.8 of JISX0510:2004 for mask // pattern conditions. public static bool GetDataMaskBit(int maskPattern, int x, int y) { if (!QRCode.IsValidMaskPattern(maskPattern)) { throw new ArgumentException("Invalid mask pattern"); } int intermediate, temp; switch (maskPattern) { case 0: intermediate = (y + x) & 0x1; break; case 1: intermediate = y & 0x1; break; case 2: intermediate = x % 3; break; case 3: intermediate = (y + x) % 3; break; case 4: intermediate = ((y >> 1) + (x / 3)) & 0x1; break; case 5: temp = y * x; intermediate = (temp & 0x1) + (temp % 3); break; case 6: temp = y * x; intermediate = (((temp & 0x1) + (temp % 3)) & 0x1); break; case 7: temp = y * x; intermediate = (((temp % 3) + ((y + x) & 0x1)) & 0x1); break; default: throw new ArgumentException("Invalid mask pattern: " + maskPattern); } return(intermediate == 0); }
// Make bit vector of type information. On success, store the result in "bits" and return true. // Encode error correction level and mask pattern. See 8.9 of // JISX0510:2004 (p.45) for details. public static void MakeTypeInfoBits(ErrorCorrectionLevel ecLevel, int maskPattern, BitVector bits) { if (!QRCode.IsValidMaskPattern(maskPattern)) { throw new WriterException("Invalid mask pattern"); } int typeInfo = (ecLevel.GetBits() << 3) | maskPattern; bits.AppendBits(typeInfo, 5); int bchCode = CalculateBCHCode(typeInfo, TYPE_INFO_POLY); bits.AppendBits(bchCode, 10); BitVector maskBits = new BitVector(); maskBits.AppendBits(TYPE_INFO_MASK_PATTERN, 15); bits.Xor(maskBits); if (bits.Size() != 15) // Just in case. { throw new WriterException("should not happen but we got: " + bits.Size()); } }