コード例 #1
0
        public void testDecodeTooManyErrors()
        {
            var matrix = BitMatrix.parse(""
                                         + "X X . X . . . X X . . . X . . X X X . X . X X X X X . \n"
                                         + "X X . . X X . . . . . X X . . . X X . . . X . X . . X \n"
                                         + "X . . . X X . . X X X . X X . X X X X . X X . . X . . \n"
                                         + ". . . . X . X X . . X X . X X . X . X X X X . X . . X \n"
                                         + "X X X . . X X X X X . . . . . X X . . . X . X . X . X \n"
                                         + "X X . . . . . . . . X . . . X . X X X . X . . X . . . \n"
                                         + "X X . . X . . . . . X X . . . . . X . . . . X . . X X \n"
                                         + ". . . X . X . X . . . . . X X X X X X . . . . . . X X \n"
                                         + "X . . . X . X X X X X X . . X X X . X . X X X X X X . \n"
                                         + "X . . X X X . X X X X X X X X X X X X X . . . X . X X \n"
                                         + ". . . . X X . . . X . . . . . . . X X . . . X X . X . \n"
                                         + ". . . X X X . . X X . X X X X X . X . . X . . . . . . \n"
                                         + "X . . . . X . X . X . X . . . X . X . X X . X X . X X \n"
                                         + "X . X . . X . X . X . X . X . X . X . . . . . X . X X \n"
                                         + "X . X X X . . X . X . X . . . X . X . X X X . . . X X \n"
                                         + "X X X X X X X X . X . X X X X X . X . X . X . X X X . \n"
                                         + ". . . . . . . X . X . . . . . . . X X X X . . . X X X \n"
                                         + "X X . . X . . X . X X X X X X X X X X X X X . . X . X \n"
                                         + "X X X . X X X X . . X X X X . . X . . . . X . . X X X \n"
                                         + ". . . . X . X X X . . . . X X X X . . X X X X . . . . \n"
                                         + ". . X . . X . X . . . X . X X . X X . X . . . X . X . \n"
                                         + "X X . . X . . X X X X X X X . . X . X X X X X X X . . \n"
                                         + "X . X X . . X X . . . . . X . . . . . . X X . X X X . \n"
                                         + "X . . X X . . X X . X . X . . . . X . X . . X . . X . \n"
                                         + "X . X . X . . X . X X X X X X X X . X X X X . . X X . \n"
                                         + "X X X X . . . X . . X X X . X X . . X . . . . X X X . \n"
                                         + "X X . X . X . . . X . X . . . . X X . X . . X X . . . \n",
                                         "X ", ". ");
            var r = new AztecDetectorResult(matrix, NO_POINTS, true, 16, 4);

            Assert.That(new Decoder().decode(r), Is.Null);
        }
コード例 #2
0
        public void testAztecResultECI()
        {
            BitMatrix matrix = BitMatrix.parse(
                "      X     X X X   X           X     \n" +
                "    X X   X X   X X X X X X X   X     \n" +
                "    X X                         X   X \n" +
                "  X X X X X X X X X X X X X X X X X   \n" +
                "      X                       X       \n" +
                "      X   X X X X X X X X X   X   X   \n" +
                "  X X X   X               X   X X X   \n" +
                "  X   X   X   X X X X X   X   X X X   \n" +
                "      X   X   X       X   X   X X X   \n" +
                "  X   X   X   X   X   X   X   X   X   \n" +
                "X   X X   X   X       X   X   X     X \n" +
                "  X X X   X   X X X X X   X   X X     \n" +
                "      X   X               X   X X   X \n" +
                "      X   X X X X X X X X X   X   X X \n" +
                "  X   X                       X       \n" +
                "X X   X X X X X X X X X X X X X X X   \n" +
                "X X     X   X         X X X       X X \n" +
                "  X   X   X   X X X X X     X X   X   \n" +
                "X     X       X X   X X X       X     \n",
                "X ", "  ");
            AztecDetectorResult r      = new AztecDetectorResult(matrix, NO_POINTS, false, 15, 1);
            DecoderResult       result = new Decoder().decode(r);

            Assert.AreEqual("Français", result.Text);
        }
コード例 #3
0
        private static void testWriter(String data,
                                       Encoding encoding,
                                       int eccPercent,
                                       bool compact,
                                       int layers,
                                       bool disableEci)
        {
            // Perform an encode-decode round-trip because it can be lossy.
            var hints = new Dictionary <EncodeHintType, Object>()
            ;

            if (encoding != null)
            {
                hints[EncodeHintType.CHARACTER_SET] = encoding.WebName.ToUpper();
            }
            if (disableEci)
            {
                hints[EncodeHintType.DISABLE_ECI] = true;
            }
            hints[EncodeHintType.ERROR_CORRECTION] = eccPercent;
            var writer = new AztecWriter();
            var matrix = writer.encode(data, BarcodeFormat.AZTEC, 0, 0, hints);
            var aztec  = Internal.Encoder.encode(data, eccPercent, Internal.Encoder.DEFAULT_AZTEC_LAYERS, encoding, disableEci);

            Assert.AreEqual(compact, aztec.isCompact, "Unexpected symbol format (compact)");
            Assert.AreEqual(layers, aztec.Layers, "Unexpected nr. of layers");
            var matrix2 = aztec.Matrix;

            Assert.AreEqual(matrix, matrix2);
            var r   = new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact, aztec.CodeWords, aztec.Layers);
            var res = new Internal.Decoder().decode(r);

            Assert.AreEqual(data, res.Text);
            // Check error correction by introducing up to eccPercent/2 errors
            int ecWords = aztec.CodeWords * eccPercent / 100 / 2;
            var random  = getPseudoRandom();

            for (int i = 0; i < ecWords; i++)
            {
                // don't touch the core
                int x = random.Next(1) > 0
                    ? random.Next(aztec.Layers * 2)
                    : matrix.Width - 1 - random.Next(aztec.Layers * 2);
                int y = random.Next(1) > 0
                    ? random.Next(aztec.Layers * 2)
                    : matrix.Height - 1 - random.Next(aztec.Layers * 2);
                matrix.flip(x, y);
            }
            r   = new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact, aztec.CodeWords, aztec.Layers);
            res = new Internal.Decoder().decode(r);
            Assert.AreEqual(data, res.Text);
        }
コード例 #4
0
        private static void testWriter(String data,
                                       String charset,
                                       int eccPercent,
                                       bool compact,
                                       int layers)
        {
            // 1. Perform an encode-decode round-trip because it can be lossy.
            // 2. Aztec Decoder currently always decodes the data with a LATIN-1 charset:
            var byteData     = Encoding.GetEncoding(charset).GetBytes(data);
            var expectedData = LATIN_1.GetString(byteData, 0, byteData.Length);
            var hints        = new Dictionary <EncodeHintType, Object>()
            ;

            hints[EncodeHintType.CHARACTER_SET]    = charset;
            hints[EncodeHintType.ERROR_CORRECTION] = eccPercent;
            var writer = new AztecWriter();
            var matrix = writer.encode(data, BarcodeFormat.AZTEC, 0, 0, hints);
            var aztec  = Internal.Encoder.encode(Encoding.GetEncoding(charset).GetBytes(data), eccPercent, Internal.Encoder.DEFAULT_AZTEC_LAYERS);

            Assert.AreEqual(compact, aztec.isCompact, "Unexpected symbol format (compact)");
            Assert.AreEqual(layers, aztec.Layers, "Unexpected nr. of layers");
            var matrix2 = aztec.Matrix;

            Assert.AreEqual(matrix, matrix2);
            var r   = new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact, aztec.CodeWords, aztec.Layers);
            var res = new Internal.Decoder().decode(r);

            Assert.AreEqual(expectedData, res.Text);
            // Check error correction by introducing up to eccPercent/2 errors
            int ecWords = aztec.CodeWords * eccPercent / 100 / 2;
            var random  = getPseudoRandom();

            for (int i = 0; i < ecWords; i++)
            {
                // don't touch the core
                int x = random.Next(1) > 0
                       ? random.Next(aztec.Layers * 2)
                       : matrix.Width - 1 - random.Next(aztec.Layers * 2);
                int y = random.Next(1) > 0
                       ? random.Next(aztec.Layers * 2)
                       : matrix.Height - 1 - random.Next(aztec.Layers * 2);
                matrix.flip(x, y);
            }
            r   = new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact, aztec.CodeWords, aztec.Layers);
            res = new Internal.Decoder().decode(r);
            Assert.AreEqual(expectedData, res.Text);
        }
コード例 #5
0
        public void testAztecResult()
        {
            BitMatrix matrix = BitMatrix.parse(
                "X X X X X     X X X       X X X     X X X     \n" +
                "X X X     X X X     X X X X     X X X     X X \n" +
                "  X   X X       X   X   X X X X     X     X X \n" +
                "  X   X X     X X     X     X   X       X   X \n" +
                "  X X   X X         X               X X     X \n" +
                "  X X   X X X X X X X X X X X X X X X     X   \n" +
                "  X X X X X                       X   X X X   \n" +
                "  X   X   X   X X X X X X X X X   X X X   X X \n" +
                "  X   X X X   X               X   X X       X \n" +
                "  X X   X X   X   X X X X X   X   X X X X   X \n" +
                "  X X   X X   X   X       X   X   X   X X X   \n" +
                "  X   X   X   X   X   X   X   X   X   X   X   \n" +
                "  X X X   X   X   X       X   X   X X   X X   \n" +
                "  X X X X X   X   X X X X X   X   X X X   X X \n" +
                "X X   X X X   X               X   X   X X   X \n" +
                "  X       X   X X X X X X X X X   X   X     X \n" +
                "  X X   X X                       X X   X X   \n" +
                "  X X X   X X X X X X X X X X X X X X   X X   \n" +
                "X     X     X     X X   X X               X X \n" +
                "X   X X X X X   X X X X X     X   X   X     X \n" +
                "X X X   X X X X           X X X       X     X \n" +
                "X X     X X X     X X X X     X X X     X X   \n" +
                "    X X X     X X X       X X X     X X X X   \n",
                "X ", "  ");
            AztecDetectorResult r      = new AztecDetectorResult(matrix, NO_POINTS, false, 30, 2);
            DecoderResult       result = new Decoder().decode(r);

            Assert.AreEqual("88888TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", result.Text);
            Assert.AreEqual(
                new byte[]
            {
                245, 85, 85, 117, 107, 90, 214, 181, 173, 107,
                90, 214, 181, 173, 107, 90, 214, 181, 173, 107,
                90, 214, 176
            },
                result.RawBytes);
            Assert.AreEqual(180, result.NumBits);
        }
コード例 #6
0
        private static void testEncodeDecode(String data, bool compact, int layers)
        {
            AztecCode aztec = Internal.Encoder.encode(LATIN_1.GetBytes(data), 25);

            Assert.AreEqual(compact, aztec.isCompact, "Unexpected symbol format (compact)");
            Assert.AreEqual(layers, aztec.Layers, "Unexpected nr. of layers");
            BitMatrix           matrix = aztec.Matrix;
            AztecDetectorResult r      =
                new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact, aztec.CodeWords, aztec.Layers);
            DecoderResult res = new Internal.Decoder().decode(r);

            Assert.AreEqual(data, res.Text);
            // Check error correction by introducing a few minor errors
            Random random = getPseudoRandom();

            matrix.flip(random.Next(matrix.Width), random.Next(2));
            matrix.flip(random.Next(matrix.Width), matrix.Height - 2 + random.Next(2));
            matrix.flip(random.Next(2), random.Next(matrix.Height));
            matrix.flip(matrix.Width - 2 + random.Next(2), random.Next(matrix.Height));
            r   = new AztecDetectorResult(matrix, NO_POINTS, aztec.isCompact, aztec.CodeWords, aztec.Layers);
            res = new Internal.Decoder().decode(r);
            Assert.AreEqual(data, res.Text);
        }