private void ZXEncode(string content, int option) { System.String encoding = QRCodeConstantVariable.DefaultEncoding; ErrorCorrectionLevelInternal m_EcLevelInternal = ErrorCorrectionLevelInternal.H; QRCodeInternal qrCodeInternal = new QRCodeInternal(); // Step 1: Choose the mode (encoding). Mode mode = EncoderInternal.chooseMode(content, encoding); // Step 2: Append "bytes" into "dataBits" in appropriate encoding. BitVector dataBits = new BitVector(); EncoderInternal.appendBytes(content, mode, dataBits, encoding); // Step 3: Initialize QR code that can contain "dataBits". int numInputBytes = dataBits.sizeInBytes(); EncoderInternal.initQRCode(numInputBytes, m_EcLevelInternal, mode, qrCodeInternal); // Step 4: Build another bit vector that contains header and data. BitVector headerAndDataBits = new BitVector(); // Step 4.5: Append ECI message if applicable if (mode == Mode.BYTE && !QRCodeConstantVariable.DefaultEncoding.Equals(encoding)) { CharacterSetECI eci = CharacterSetECI.getCharacterSetECIByName(encoding); if (eci != null) { EncoderInternal.appendECI(eci, headerAndDataBits); } } EncoderInternal.appendModeInfo(mode, headerAndDataBits); int numLetters = mode.Equals(Mode.BYTE)?dataBits.sizeInBytes():content.Length; EncoderInternal.appendLengthInfo(numLetters, qrCodeInternal.Version, mode, headerAndDataBits); headerAndDataBits.appendBitVector(dataBits); // Step 5: Terminate the bits properly. EncoderInternal.terminateBits(qrCodeInternal.NumDataBytes, headerAndDataBits); // Step 6: Interleave data bits with error correction code. BitVector finalBits = new BitVector(); EncoderInternal.interleaveWithECBytes(headerAndDataBits, qrCodeInternal.NumTotalBytes, qrCodeInternal.NumDataBytes, qrCodeInternal.NumRSBlocks, finalBits); if (option == 3) { return; } // Step 7: Choose the mask pattern and set to "QRCodeInternal". ByteMatrix matrix = new ByteMatrix(qrCodeInternal.MatrixWidth, qrCodeInternal.MatrixWidth); qrCodeInternal.MaskPattern = EncoderInternal.chooseMaskPattern(finalBits, qrCodeInternal.EcLevelInternal, qrCodeInternal.Version, matrix); // Step 8. Build the matrix and set it to "QRCodeInternal". MatrixUtil.buildMatrix(finalBits, qrCodeInternal.EcLevelInternal, qrCodeInternal.Version, qrCodeInternal.MaskPattern, matrix); qrCodeInternal.Matrix = matrix; }
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]); }
private IEnumerable <bool> TerminatorUsingReferenceImplementation(int numDataBits, int numTotalByte) { BitVector dataBits = new BitVector(); dataBits.Append(1, numDataBits); EncoderInternal.terminateBits(numTotalByte, dataBits); return(dataBits); }
protected override IEnumerable <bool> EncodeUsingReferenceImplementation(string content) { // Step 2: Append "bytes" into "dataBits" in appropriate encoding. BitVector dataBits = new BitVector(); EncoderInternal.appendBytes(content, Mode.BYTE, dataBits, "Shift_JIS"); return(dataBits); }
protected virtual IEnumerable <bool> EncodeUsingReferenceImplementation(string content, Mode mode) { // Step 2: Append "bytes" into "dataBits" in appropriate encoding. BitVector dataBits = new BitVector(); EncoderInternal.appendBytes(content, mode, dataBits, null); return(dataBits); }
public static BitVector Codeword(string content, ErrorCorrectionLevel ecLevel) { QRCodeInternal qrInternal; BitVector headerAndDataBits = DataEncodeUsingReferenceImplementation(content, ecLevel, out qrInternal); // Step 6: Interleave data bits with error correction code. BitVector finalBits = new BitVector(); EncoderInternal.interleaveWithECBytes(headerAndDataBits, qrInternal.NumTotalBytes, qrInternal.NumDataBytes, qrInternal.NumRSBlocks, finalBits); return(finalBits); }
/// <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); }
public static BitMatrix Encode(string content, ErrorCorrectionLevel ecLevel) { QRCodeInternal qrInternal; BitVector headerAndDataBits = DataEncodeUsingReferenceImplementation(content, ecLevel, out qrInternal); // Step 6: Interleave data bits with error correction code. BitVector finalBits = new BitVector(); EncoderInternal.interleaveWithECBytes(headerAndDataBits, qrInternal.NumTotalBytes, qrInternal.NumDataBytes, qrInternal.NumRSBlocks, finalBits); // Step 7: Choose the mask pattern and set to "QRCodeInternal". ByteMatrix matrix = new ByteMatrix(qrInternal.MatrixWidth, qrInternal.MatrixWidth); int MaskPattern = EncoderInternal.chooseMaskPattern(finalBits, qrInternal.EcLevelInternal, qrInternal.Version, matrix); // Step 8. Build the matrix and set it to "QRCodeInternal". MatrixUtil.buildMatrix(finalBits, qrInternal.EcLevelInternal, qrInternal.Version, MaskPattern, matrix); return(matrix.ToBitMatrix()); }
public void PerformanceTest() { Random randomizer = new Random(); sbyte[] zxTestCase = PolynomialExtensions.GenerateSbyteArray(40, randomizer); int ecBytes = 50; byte[] testCase = PolynomialExtensions.ToByteArray(zxTestCase); Stopwatch sw = new Stopwatch(); int timesofTest = 10000; string[] timeElapsed = new string[2]; sw.Start(); GaloisField256 gf256 = GaloisField256.QRCodeGaloisField; GeneratorPolynomial generator = new GeneratorPolynomial(gf256); for (int i = 0; i < timesofTest; i++) { ReedSolomonEncoder.Encode(testCase, ecBytes, generator); } sw.Stop(); timeElapsed[0] = sw.ElapsedMilliseconds.ToString(); sw.Reset(); sw.Start(); for (int i = 0; i < timesofTest; i++) { EncoderInternal.generateECBytes(zxTestCase, ecBytes); } sw.Stop(); timeElapsed[1] = sw.ElapsedMilliseconds.ToString(); Assert.Pass("ReedSolomon performance {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]); }
public void QrPerformanceTest() { Stopwatch sw = new Stopwatch(); int timesofTest = 1000; string[] timeElapsed = new string[2]; string testCase = "sdg;alwsetuo1204985lkscvzlkjt;sdfjwltkja;slkdfjoiutLSAFAJ;GLKAJS;LDKJT;LKJ"; QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.H); sw.Start(); for (int i = 0; i < timesofTest; i++) { encoder.Encode(testCase); } sw.Stop(); timeElapsed[0] = sw.ElapsedMilliseconds.ToString(); sw.Reset(); ErrorCorrectionLevelInternal level = ErrorCorrectionLevelConverter.ToInternal(ErrorCorrectionLevel.H); QRCodeInternal qrCodeInternal = new QRCodeInternal(); sw.Start(); for (int i = 0; i < timesofTest; i++) { EncoderInternal.encode(testCase, level, qrCodeInternal); } sw.Stop(); timeElapsed[1] = sw.ElapsedMilliseconds.ToString(); Assert.Pass("Encode performance {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]); }
public void PerformanceTest() { Random randomizer = new Random(); BitVector dataCodewordsV = GenerateDataCodewords(s_vcInfo.NumDataBytes, randomizer); BitList dataCodewordsL = new BitList(); dataCodewordsL.Add(dataCodewordsV); Stopwatch sw = new Stopwatch(); int timesofTest = 1000; string[] timeElapsed = new string[2]; sw.Start(); for (int i = 0; i < timesofTest; i++) { ECGenerator.FillECCodewords(dataCodewordsL, s_vcInfo); } sw.Stop(); timeElapsed[0] = sw.ElapsedMilliseconds.ToString(); sw.Reset(); sw.Start(); for (int i = 0; i < timesofTest; i++) { BitVector finalBits = new BitVector(); EncoderInternal.interleaveWithECBytes(dataCodewordsV, s_vcInfo.NumTotalBytes, s_vcInfo.NumDataBytes, s_vcInfo.NumECBlocks, finalBits); } sw.Stop(); timeElapsed[1] = sw.ElapsedMilliseconds.ToString(); Assert.Pass("ErrorCorrection performance {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]); }
public void PerformanceTest() { Stopwatch sw = new Stopwatch(); int timesofTest = 1000; string[] timeElapsed = new string[2]; sw.Start(); for(int i = 0; i < timesofTest; i++) { BitList list = new BitList(); list.TerminateBites(0, 400); } sw.Stop(); timeElapsed[0] = sw.ElapsedMilliseconds.ToString(); sw.Reset(); sw.Start(); for(int i = 0; i < timesofTest; i++) { BitVector headerAndDataBits = new BitVector(); //headerAndDataBits.Append(1, 1); EncoderInternal.terminateBits(400, headerAndDataBits); } sw.Stop(); timeElapsed[1] = sw.ElapsedMilliseconds.ToString(); Assert.Pass("Terminator performance {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]); }
private void PTest(int contentLength) { Stopwatch sw = new Stopwatch(); int timesofTest = 1000; string[] timeElapsed = new string[2]; sw.Start(); for (int i = 0; i < timesofTest; i++) { VersionControl.InitialSetup(contentLength, Mode.Alphanumeric, ErrorCorrectionLevel.H, QRCodeConstantVariable.DefaultEncoding); } sw.Stop(); timeElapsed[0] = sw.ElapsedMilliseconds.ToString(); sw.Reset(); QRCodeInternal qrInternal = new QRCodeInternal(); int byteLength = contentLength / 8; sw.Start(); for (int i = 0; i < timesofTest; i++) { EncoderInternal.initQRCode(byteLength, ErrorCorrectionLevelInternal.H, ZMode.ALPHANUMERIC, qrInternal); } sw.Stop(); timeElapsed[1] = sw.ElapsedMilliseconds.ToString(); Assert.Pass("VersionControl {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]); }