Exemple #1
0
 private QREncoderMatrix(int dimension, string content, QRCorrectionLevel correctionLevel, QRMode mode, QRVersion version)
     : base(dimension, dimension)
 {
     Content = content;
     CorrectionLevel = correctionLevel;
     Mode = mode;
     Version = version;
 }
Exemple #2
0
        public static QREncoderMatrix Encode(string content, QRCorrectionLevel correctionLevel)
        {
            string encoding = DEFAULT_ENCODING;

            QRMode mode = chooseMode(content, encoding);

            BitList header = new BitList();

            header.AppendBits(mode.ModeSignature, 4);

            BitList data = new BitList();

            AppendBytes(content, mode, data);

            int       provisionalBitsNeeded = header.Size + mode.GetVersionCharacterCount(QRVersion.GetVersionByNumber(1)) + data.Size;
            QRVersion provisionalVersion    = chooseVersion(provisionalBitsNeeded, correctionLevel);

            int       bitsNeeded = header.Size + mode.GetVersionCharacterCount(provisionalVersion) + data.Size;
            QRVersion version    = chooseVersion(bitsNeeded, correctionLevel);

            BitList headerNData = new BitList();

            headerNData.AppendBitList(header);

            int numLetters = mode == QRMode.BYTE ? data.ByteSize : content.Length;

            AppendLengthInfo(numLetters, version, mode, headerNData);

            headerNData.AppendBitList(data);

            QRVersion.CorrectionBlockSet correctionBlockSet = version.GetBlockSetByLevel(correctionLevel);
            int dataBytesQty = version.TotalCodewords - correctionBlockSet.TotalCodewords;

            WriteTerminationSection(dataBytesQty, headerNData);

            BitList finalBits = MixWithCorrectionBytes(headerNData, version.TotalCodewords, dataBytesQty, correctionBlockSet.TotalQty);

            int             dimension = version.Dimension;
            QREncoderMatrix matrix    = new QREncoderMatrix(dimension, content, correctionLevel, mode, version);

            int maskPattern = chooseMaskPattern(finalBits, correctionLevel, version, matrix);

            matrix.MaskPattern = maskPattern;

            matrix.FormMatrix(finalBits, correctionLevel, version, maskPattern);

            return(matrix);
        }
Exemple #3
0
      public static QREncoderMatrix Encode(string content, QRCorrectionLevel correctionLevel)
      {
        string encoding = DEFAULT_ENCODING;

        QRMode mode = chooseMode(content, encoding);

        BitList header = new BitList();
        header.AppendBits(mode.ModeSignature, 4);

        BitList data = new BitList();
        AppendBytes(content, mode, data);

        int provisionalBitsNeeded = header.Size + mode.GetVersionCharacterCount(QRVersion.GetVersionByNumber(1)) + data.Size;
        QRVersion provisionalVersion = chooseVersion(provisionalBitsNeeded, correctionLevel);

        int bitsNeeded = header.Size + mode.GetVersionCharacterCount(provisionalVersion) + data.Size;
        QRVersion version = chooseVersion(bitsNeeded, correctionLevel);

        BitList headerNData = new BitList();

        headerNData.AppendBitList(header);

        int numLetters = mode == QRMode.BYTE ? data.ByteSize : content.Length;

        AppendLengthInfo(numLetters, version, mode, headerNData);

        headerNData.AppendBitList(data);

        QRVersion.CorrectionBlockSet correctionBlockSet = version.GetBlockSetByLevel(correctionLevel);
        int dataBytesQty = version.TotalCodewords - correctionBlockSet.TotalCodewords;

        WriteTerminationSection(dataBytesQty, headerNData);

        BitList finalBits = MixWithCorrectionBytes(headerNData, version.TotalCodewords, dataBytesQty, correctionBlockSet.TotalQty);

        int dimension = version.Dimension;
        QREncoderMatrix matrix = new QREncoderMatrix( dimension, content, correctionLevel, mode, version);
        
        int maskPattern = chooseMaskPattern(finalBits, correctionLevel, version, matrix);

        matrix.MaskPattern = maskPattern;

        matrix.FormMatrix(finalBits, correctionLevel, version, maskPattern);

        return matrix;
      }
Exemple #4
0
        private static int chooseMaskPattern(BitList bits, QRCorrectionLevel correctionLevel, QRVersion version, QRMatrix matrix)
        {
            int minPenalty      = Int32.MaxValue; // Assume the lowest possible penalty
            int bestMaskPattern = -1;

            // Calculate all mask paterns to find the pattern with minimum possible penalty
            for (int maskPattern = 0; maskPattern < MASK_PATTERNS_QTY; maskPattern++)
            {
                matrix.FormMatrix(bits, correctionLevel, version, maskPattern);
                int penalty = matrix.GetMaskPenalty();
                if (penalty < minPenalty)
                {
                    minPenalty      = penalty;
                    bestMaskPattern = maskPattern;
                }
            }
            return(bestMaskPattern);
        }
Exemple #5
0
        private static QRVersion chooseVersion(int numInputBits, QRCorrectionLevel ecLevel)
        {
            for (int versionNum = 1; versionNum <= 40; versionNum++)
            {
                QRVersion version  = QRVersion.GetVersionByNumber(versionNum);
                int       numBytes = version.TotalCodewords;
                QRVersion.CorrectionBlockSet correctionBlocks = version.GetBlockSetByLevel(ecLevel);
                int numEcBytes      = correctionBlocks.TotalCodewords;
                int numDataBytes    = numBytes - numEcBytes;
                int totalInputBytes = (numInputBits + 7) / 8;
                if (numDataBytes >= totalInputBytes)
                {
                    return(version);
                }
            }

            throw new NFXException(StringConsts.CODE_LOGIC_ERROR + typeof(QREncoderMatrix).Name + ".chooseVersion(data)");
        }
Exemple #6
0
        private void Generate(string content, QRCorrectionLevel correctionLevel, QRImageRenderer.ImageScale scale)
        {
            Matrix = null;
              Matrix = QREncoderMatrix.Encode(content, correctionLevel);

              using (MemoryStream stream = new MemoryStream())
              {
            Matrix.ToBMP(stream, scale: scale);
            stream.Flush();

            TypeConverter converter = TypeDescriptor.GetConverter(typeof(Bitmap));
            Bitmap bmp = converter.ConvertFrom(stream.ToArray()) as Bitmap;

            m_pnlImage.BackgroundImage = bmp;
            m_txtTrace.Text = Matrix.ToString();
              }
        }
Exemple #7
0
 public CorrectionBlockSet GetBlockSetByLevel(QRCorrectionLevel level)
 {
     return(m_CorrectionBlockSets[level.Ordinal]);
 }
Exemple #8
0
 public CorrectionBlockSet GetBlockSetByLevel(QRCorrectionLevel level)
 {
     return m_CorrectionBlockSets[level.Ordinal];
 }
Exemple #9
0
        public static QREncoderMatrix CreateMatrix(string content, QRCorrectionLevel correctionLevel)
        {
            QREncoderMatrix matrix = Encode(content, correctionLevel);

            return(matrix);
        }
Exemple #10
0
 public static QREncoderMatrix CreateMatrix(string content, QRCorrectionLevel correctionLevel)
 {
   QREncoderMatrix matrix = Encode(content, correctionLevel);
   return matrix;
 }
Exemple #11
0
 private static int chooseMaskPattern(BitList bits, QRCorrectionLevel correctionLevel, QRVersion version, QRMatrix matrix)
 {
   int minPenalty = Int32.MaxValue;  // Assume the lowest possible penalty
   int bestMaskPattern = -1;
   // Calculate all mask paterns to find the pattern with minimum possible penalty
   for (int maskPattern = 0; maskPattern < MASK_PATTERNS_QTY; maskPattern++)
   {
     matrix.FormMatrix(bits, correctionLevel, version, maskPattern);
     int penalty = matrix.GetMaskPenalty();
     if (penalty < minPenalty)
     {
       minPenalty = penalty;
       bestMaskPattern = maskPattern;
     }
   }
   return bestMaskPattern;
 }
Exemple #12
0
      private static QRVersion chooseVersion(int numInputBits, QRCorrectionLevel ecLevel)
      {
        for (int versionNum = 1; versionNum <= 40; versionNum++)
        {
          QRVersion version = QRVersion.GetVersionByNumber(versionNum);
          int numBytes = version.TotalCodewords;
          QRVersion.CorrectionBlockSet correctionBlocks = version.GetBlockSetByLevel(ecLevel);
          int numEcBytes = correctionBlocks.TotalCodewords;
          int numDataBytes = numBytes - numEcBytes;
          int totalInputBytes = (numInputBits + 7) / 8;
          if (numDataBytes >= totalInputBytes)
              return version;
        }

        throw new NFXException(StringConsts.CODE_LOGIC_ERROR + typeof(QREncoderMatrix).Name + ".chooseVersion(data)");
      }