Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 protected MaskAttribute(string matchPattern, string replacePattern) : this()
 {
     Pattern = new MaskPattern(matchPattern, replacePattern);
 }
Ejemplo n.º 7
0
 protected MaskAttribute()
 {
     Pattern = new MaskPattern(string.Empty, string.Empty);
 }