Ejemplo n.º 1
0
        public void PerformanceTest()
        {
            Stopwatch sw          = new Stopwatch();
            int       timesofTest = 1000;

            string[] timeElapsed = new string[2];

            sw.Start();

            for (int i = 0; i < timesofTest; i++)
            {
                InputRecognise.Recognise(s_TestCase);
            }

            sw.Stop();

            timeElapsed[0] = sw.ElapsedMilliseconds.ToString();

            sw.Reset();

            sw.Start();

            for (int i = 0; i < timesofTest; i++)
            {
                EncoderInternal.chooseMode(s_TestCase, QRCodeConstantVariable.DefaultEncoding);
            }
            sw.Stop();

            timeElapsed[1] = sw.ElapsedMilliseconds.ToString();


            Assert.Pass("InputRecognise performance {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Combine Gma.QrCodeNet.Encoding input recognition method and version control method
        /// with legacy code. To create expected answer.
        /// This is base on assume Gma.QrCodeNet.Encoding input recognition and version control sometime
        /// give different result as legacy code.
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        internal static BitVector DataEncodeUsingReferenceImplementation(string content, ErrorCorrectionLevel ecLevel, out QRCodeInternal qrInternal)
        {
            if (string.IsNullOrEmpty(content))
            {
                throw new ArgumentException("input string content can not be null or empty");
            }

            //Choose mode
            RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
            string            encodingName      = recognitionResult.EncodingName;
            Mode mode = ConvertMode(recognitionResult.Mode);

            //append byte to databits
            BitVector dataBits = new BitVector();

            EncoderInternal.appendBytes(content, mode, dataBits, encodingName);

            int dataBitsLength            = dataBits.size();
            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(dataBitsLength, recognitionResult.Mode, ecLevel, recognitionResult.EncodingName);
            //ECI
            BitVector headerAndDataBits = new BitVector();
            string    defaultByteMode   = "iso-8859-1";

            if (mode == Mode.BYTE && !defaultByteMode.Equals(encodingName))
            {
                CharacterSetECI eci = CharacterSetECI.getCharacterSetECIByName(encodingName);
                if (eci != null)
                {
                    EncoderInternal.appendECI(eci, headerAndDataBits);
                }
            }
            //Mode
            EncoderInternal.appendModeInfo(mode, headerAndDataBits);
            //Char info
            int numLetters = mode.Equals(Mode.BYTE)?dataBits.sizeInBytes():content.Length;

            EncoderInternal.appendLengthInfo(numLetters, vcStruct.VersionDetail.Version, mode, headerAndDataBits);
            //Combine with dataBits
            headerAndDataBits.appendBitVector(dataBits);

            // Terminate the bits properly.
            EncoderInternal.terminateBits(vcStruct.VersionDetail.NumDataBytes, headerAndDataBits);

            qrInternal                 = new QRCodeInternal();
            qrInternal.Version         = vcStruct.VersionDetail.Version;
            qrInternal.MatrixWidth     = vcStruct.VersionDetail.MatrixWidth;
            qrInternal.EcLevelInternal = ErrorCorrectionLevelConverter.ToInternal(ecLevel);
            qrInternal.NumTotalBytes   = vcStruct.VersionDetail.NumTotalBytes;
            qrInternal.NumDataBytes    = vcStruct.VersionDetail.NumDataBytes;
            qrInternal.NumRSBlocks     = vcStruct.VersionDetail.NumECBlocks;
            return(headerAndDataBits);
        }
Ejemplo n.º 3
0
        internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel)
        {
            RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
            EncoderBase       encoderBase       = CreateEncoder(recognitionResult.EncodingName);

            BitList encodeContent = encoderBase.GetDataBits(content);

            int encodeContentLength = encodeContent.Count;

            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(encodeContentLength, ecLevel, recognitionResult.EncodingName);

            BitList dataCodewords = new BitList();

            // Eci header
            if (vcStruct.IsContainECI && !(vcStruct.ECIHeader is null))
            {
                dataCodewords.Add(vcStruct.ECIHeader);
            }

            // Header
            dataCodewords.Add(encoderBase.GetModeIndicator());
            int numLetter = encodeContentLength >> 3;

            dataCodewords.Add(encoderBase.GetCharCountIndicator(numLetter, vcStruct.VersionDetail.Version));

            // Data
            dataCodewords.Add(encodeContent);

            // Terminator Padding
            dataCodewords.TerminateBites(dataCodewords.Count, vcStruct.VersionDetail.NumDataBytes);

            int dataCodewordsCount = dataCodewords.Count;

            if ((dataCodewordsCount & 0x7) != 0)
            {
                throw new ArgumentException($"{nameof(dataCodewords)} is not byte sized.");
            }
            else if (dataCodewordsCount >> 3 != vcStruct.VersionDetail.NumDataBytes)
            {
                throw new ArgumentException($"{nameof(dataCodewords)} num of bytes not equal to {nameof(vcStruct.VersionDetail.NumDataBytes)} for current version");
            }

            var encStruct = new EncodationStruct(vcStruct)
            {
                DataCodewords = dataCodewords
            };

            return(encStruct);
        }
Ejemplo n.º 4
0
        internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel)
        {
            RecognitionStruct recognitionResult = InputRecognise.Recognise(content);
            EncoderBase       encoderBase       = CreateEncoder(recognitionResult.EncodingName);

            BitList encodeContent = encoderBase.GetDataBits(content);

            int encodeContentLength = encodeContent.Count;

            VersionControlStruct vcStruct =
                VersionControl.InitialSetup(encodeContentLength, ecLevel, recognitionResult.EncodingName);

            BitList dataCodewords = new();

            // Eci header
            if (vcStruct.IsContainECI && vcStruct.ECIHeader is { })
Ejemplo n.º 5
0
        public void AutoSelectTestTwo(string content, string expectEncodingName, int expectMode)
        {
            RecognitionStruct structValue = InputRecognise.Recognise(content);

            if (structValue.Mode != (Mode)expectMode)
            {
                Assert.Fail("Mode return as {0}. But it should be {1}", structValue.Mode, (Mode)expectMode);
            }

            if (structValue.Mode == Mode.EightBitByte)
            {
                if (structValue.EncodingName != expectEncodingName)
                {
                    Assert.Fail("Encoding Name return as {0}. But it should be {1}", structValue.EncodingName, expectEncodingName);
                }
            }
        }