public static bool GetMask(MaskPattern maskPattern, int i, int j) { switch (maskPattern) { case MaskPattern.Pattern000: return((i + j) % 2 == 0); case MaskPattern.Pattern001: return(i % 2 == 0); case MaskPattern.Pattern010: return(j % 3 == 0); case MaskPattern.Pattern011: return((i + j) % 3 == 0); case MaskPattern.Pattern100: return((i / 2 + j / 3) % 2 == 0); case MaskPattern.Pattern101: return((i * j) % 2 + (i * j) % 3 == 0); case MaskPattern.Pattern110: return(((i * j) % 2 + (i * j) % 3) % 2 == 0); case MaskPattern.Pattern111: return(((i * j) % 3 + (i + j) % 2) % 2 == 0); default: throw new ArgumentException("bad maskPattern:" + maskPattern); } }
private void MapData(byte[] data, MaskPattern maskPattern) { var inc = -1; var row = _moduleCount - 1; var bitIndex = 7; var byteIndex = 0; for (var col = _moduleCount - 1; col > 0; col -= 2) { if (col == 6) { col -= 1; } while (true) { for (var c = 0; c < 2; c += 1) { if (_modules[row, col - c] == null) { var dark = false; if (byteIndex < data.Length) { dark = (((uint)data[byteIndex] >> bitIndex) & 1) == 1; } var mask = QRUtil.GetMask(maskPattern, row, col - c); if (mask) { dark = !dark; } _modules[row, col - c] = dark; bitIndex -= 1; if (bitIndex == -1) { byteIndex += 1; bitIndex = 7; } } } row += inc; if (row < 0 || _moduleCount <= row) { row -= inc; inc = -inc; break; } } } }
private MaskPattern GetBestMaskPattern() { var minLostPoint = 0; MaskPattern pattern = 0; for (var i = 0; i < 8; i += 1) { MakeImpl(true, (MaskPattern)i); var lostPoint = QRUtil.GetLostPoint(this); if (i == 0 || minLostPoint > lostPoint) { minLostPoint = lostPoint; pattern = (MaskPattern)i; } } return(pattern); }
private void SetupTypeInfo(bool test, MaskPattern maskPattern) { var data = ((int)_errorCorrectLevel << 3) | (int)maskPattern; var bits = QRUtil.GetBchTypeInfo(data); // vertical for (var i = 0; i < 15; i += 1) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 6) { _modules[i, 8] = mod; } else if (i < 8) { _modules[i + 1, 8] = mod; } else { _modules[_moduleCount - 15 + i, 8] = mod; } } // horizontal for (var i = 0; i < 15; i += 1) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 8) { _modules[8, _moduleCount - i - 1] = mod; } else if (i < 9) { _modules[8, 15 - i - 1 + 1] = mod; } else { _modules[8, 15 - i - 1] = mod; } } // fixed module _modules[_moduleCount - 8, 8] = (!test); }
private void MakeImpl(bool test, MaskPattern maskPattern) { _moduleCount = _typeNumber * 4 + 17; _modules = new bool?[_moduleCount, _moduleCount]; SetupPositionProbePattern(0, 0); SetupPositionProbePattern(_moduleCount - 7, 0); SetupPositionProbePattern(0, _moduleCount - 7); SetupPositionAdjustPattern(); SetupTimingPattern(); SetupTypeInfo(test, maskPattern); if (_typeNumber >= 7) { SetupTypeNumber(test); } if (_dataCache == null) { _dataCache = CreateData(_typeNumber, _errorCorrectLevel, _dataList); } MapData(_dataCache, maskPattern); }
protected MaskAttribute(string matchPattern, string replacePattern) : this() { Pattern = new MaskPattern(matchPattern, replacePattern); }
protected MaskAttribute() { Pattern = new MaskPattern(string.Empty, string.Empty); }