Exemple #1
0
        public static int GetBCHTypeInfo(int data)
        {
            int num = data << 10;

            while (QRUtil.GetBCHDigit(num) - QRUtil.GetBCHDigit(1335) >= 0)
            {
                num ^= 1335 << QRUtil.GetBCHDigit(num) - QRUtil.GetBCHDigit(1335);
            }
            return((data << 10 | num) ^ 21522);
        }
Exemple #2
0
        private void MapData(byte[] data, int maskPattern)
        {
            int inc       = -1;
            int row       = moduleCount - 1;
            int bitIndex  = 7;
            int byteIndex = 0;

            for (int col = moduleCount - 1; col > 0; col -= 2)
            {
                if (col == 6)
                {
                    col--;
                }
                while (true)
                {
                    for (int c = 0; c < 2; c++)
                    {
                        if (modules[row][col - c] == null)
                        {
                            bool dark = false;

                            if (byteIndex < data.Length)
                            {
                                dark = (((int)(((uint)data[byteIndex]) >> bitIndex) & 1) == 1);
                            }

                            bool mask = QRUtil.GetMask(maskPattern, row, col - c);
                            if (mask)
                            {
                                dark = !dark;
                            }

                            modules[row][col - c] = dark;
                            bitIndex--;
                            if (bitIndex == -1)
                            {
                                byteIndex++;
                                bitIndex = 7;
                            }
                        }
                    }

                    row += inc;
                    if (row < 0 || moduleCount <= row)
                    {
                        row -= inc;
                        inc  = -inc;
                        break;
                    }
                }
            }
        }
Exemple #3
0
        private int GetBestMaskPattern()
        {
            int num    = 0;
            int result = 0;

            for (int i = 0; i < 8; i++)
            {
                this.Make(true, i);
                int lostPoint = QRUtil.GetLostPoint(this);
                if (i == 0 || num > lostPoint)
                {
                    num    = lostPoint;
                    result = i;
                }
            }
            return(result);
        }
Exemple #4
0
        private void SetupTypeInfo(bool test, int maskPattern)
        {
            int data        = this.errorCorrectLevel << 3 | maskPattern;
            int bCHTypeInfo = QRUtil.GetBCHTypeInfo(data);

            for (int i = 0; i < 15; i++)
            {
                bool value = !test && (bCHTypeInfo >> i & 1) == 1;
                if (i < 6)
                {
                    this.modules[i][8] = new bool?(value);
                }
                else
                {
                    if (i < 8)
                    {
                        this.modules[i + 1][8] = new bool?(value);
                    }
                    else
                    {
                        this.modules[this.moduleCount - 15 + i][8] = new bool?(value);
                    }
                }
            }
            for (int j = 0; j < 15; j++)
            {
                bool value2 = !test && (bCHTypeInfo >> j & 1) == 1;
                if (j < 8)
                {
                    this.modules[8][this.moduleCount - j - 1] = new bool?(value2);
                }
                else
                {
                    if (j < 9)
                    {
                        this.modules[8][15 - j - 1 + 1] = new bool?(value2);
                    }
                    else
                    {
                        this.modules[8][15 - j - 1] = new bool?(value2);
                    }
                }
            }
            this.modules[this.moduleCount - 8][8] = new bool?(!test);
        }
Exemple #5
0
        private void MapData(byte[] data, int maskPattern)
        {
            int num  = -1;
            int num2 = this.moduleCount - 1;
            int num3 = 7;
            int num4 = 0;

            for (int i = this.moduleCount - 1; i > 0; i -= 2)
            {
                if (i == 6)
                {
                    i--;
                }
                do
                {
                    for (int j = 0; j < 2; j++)
                    {
                        if (!this.modules[num2][i - j].HasValue)
                        {
                            bool flag = false;
                            if (num4 < data.Length)
                            {
                                flag = (((uint)data[num4] >> num3 & 1u) == 1u);
                            }
                            bool mask = QRUtil.GetMask(maskPattern, num2, i - j);
                            if (mask)
                            {
                                flag = !flag;
                            }
                            this.modules[num2][i - j] = new bool?(flag);
                            num3--;
                            if (num3 == -1)
                            {
                                num4++;
                                num3 = 7;
                            }
                        }
                    }
                    num2 += num;
                }while (num2 >= 0 && this.moduleCount > num2);
                num2 -= num;
                num   = -num;
            }
        }
Exemple #6
0
        private int GetBestMaskPattern()
        {
            int minLostPoint = 0;
            int pattern      = 0;

            for (int i = 0; i < 8; i++)
            {
                Make(true, i);
                int lostPoint = QRUtil.GetLostPoint(this);

                if (i == 0 || minLostPoint > lostPoint)
                {
                    minLostPoint = lostPoint;
                    pattern      = i;
                }
            }

            return(pattern);
        }
Exemple #7
0
        private void SetupTypeInfo(bool test, int maskPattern)
        {
            int data = (errorCorrectLevel << 3) | maskPattern;
            int bits = QRUtil.GetBCHTypeInfo(data);

            for (int i = 0; i < 15; i++)
            {
                bool 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;
                }
            }

            for (int i = 0; i < 15; i++)
            {
                bool 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;
                }
            }

            modules[moduleCount - 8][8] = !test;
        }
Exemple #8
0
        private static byte[] CreateBytes(BitBuffer buffer, RSBlock[] rsBlocks)
        {
            int num  = 0;
            int num2 = 0;
            int num3 = 0;

            int[][] array  = new int[rsBlocks.Length][];
            int[][] array2 = new int[rsBlocks.Length][];
            for (int i = 0; i < rsBlocks.Length; i++)
            {
                int dataCount = rsBlocks[i].GetDataCount();
                int num4      = rsBlocks[i].GetTotalCount() - dataCount;
                num2     = Math.Max(num2, dataCount);
                num3     = Math.Max(num3, num4);
                array[i] = new int[dataCount];
                for (int j = 0; j < array[i].Length; j++)
                {
                    array[i][j] = (int)(255 & buffer.GetBuffer()[j + num]);
                }
                num += dataCount;
                Polynomial errorCorrectPolynomial = QRUtil.GetErrorCorrectPolynomial(num4);
                Polynomial polynomial             = new Polynomial(array[i], errorCorrectPolynomial.GetLength() - 1);
                Polynomial polynomial2            = polynomial.Mod(errorCorrectPolynomial);
                array2[i] = new int[errorCorrectPolynomial.GetLength() - 1];
                for (int k = 0; k < array2[i].Length; k++)
                {
                    int num5 = k + polynomial2.GetLength() - array2[i].Length;
                    array2[i][k] = ((num5 >= 0) ? polynomial2.Get(num5) : 0);
                }
            }
            int num6 = 0;

            for (int l = 0; l < rsBlocks.Length; l++)
            {
                num6 += rsBlocks[l].GetTotalCount();
            }
            byte[] array3 = new byte[num6];
            int    num7   = 0;

            for (int m = 0; m < num2; m++)
            {
                for (int n = 0; n < rsBlocks.Length; n++)
                {
                    if (m < array[n].Length)
                    {
                        array3[num7++] = (byte)array[n][m];
                    }
                }
            }
            for (int num8 = 0; num8 < num3; num8++)
            {
                for (int num9 = 0; num9 < rsBlocks.Length; num9++)
                {
                    if (num8 < array2[num9].Length)
                    {
                        array3[num7++] = (byte)array2[num9][num8];
                    }
                }
            }
            return(array3);
        }
Exemple #9
0
        private static byte[] CreateBytes(BitBuffer buffer, RSBlock[] rsBlocks)
        {
            int offset     = 0;
            int maxDcCount = 0;
            int maxEcCount = 0;

            int[][] dcdata = new int[rsBlocks.Length][];
            int[][] ecdata = new int[rsBlocks.Length][];

            for (int r = 0; r < rsBlocks.Length; r++)
            {
                int dcCount = rsBlocks[r].GetDataCount();
                int ecCount = rsBlocks[r].GetTotalCount() - dcCount;

                maxDcCount = Math.Max(maxDcCount, dcCount);
                maxEcCount = Math.Max(maxEcCount, ecCount);

                dcdata[r] = new int[dcCount];
                for (int i = 0; i < dcdata[r].Length; i++)
                {
                    dcdata[r][i] = 0xff & buffer.GetBuffer()[i + offset];
                }
                offset += dcCount;

                Polynomial rsPoly  = QRUtil.GetErrorCorrectPolynomial(ecCount);
                Polynomial rawPoly = new Polynomial(dcdata[r], rsPoly.GetLength() - 1);

                Polynomial modPoly = rawPoly.Mod(rsPoly);
                ecdata[r] = new int[rsPoly.GetLength() - 1];
                for (int i = 0; i < ecdata[r].Length; i++)
                {
                    int modIndex = i + modPoly.GetLength() - ecdata[r].Length;
                    ecdata[r][i] = (modIndex >= 0)? modPoly.Get(modIndex) : 0;
                }
            }

            int totalCodeCount = 0;

            for (int i = 0; i < rsBlocks.Length; i++)
            {
                totalCodeCount += rsBlocks[i].GetTotalCount();
            }

            byte[] data  = new byte[totalCodeCount];
            int    index = 0;

            for (int i = 0; i < maxDcCount; i++)
            {
                for (int r = 0; r < rsBlocks.Length; r++)
                {
                    if (i < dcdata[r].Length)
                    {
                        data[index++] = (byte)dcdata[r][i];
                    }
                }
            }

            for (int i = 0; i < maxEcCount; i++)
            {
                for (int r = 0; r < rsBlocks.Length; r++)
                {
                    if (i < ecdata[r].Length)
                    {
                        data[index++] = (byte)ecdata[r][i];
                    }
                }
            }

            return(data);
        }