private QREncoderMatrix(int dimension, string content, QRCorrectionLevel correctionLevel, QRMode mode, QRVersion version) : base(dimension, dimension) { Content = content; CorrectionLevel = correctionLevel; Mode = mode; Version = version; }
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); }
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; }
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); }
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)"); }
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(); } }
public CorrectionBlockSet GetBlockSetByLevel(QRCorrectionLevel level) { return(m_CorrectionBlockSets[level.Ordinal]); }
public CorrectionBlockSet GetBlockSetByLevel(QRCorrectionLevel level) { return m_CorrectionBlockSets[level.Ordinal]; }
public static QREncoderMatrix CreateMatrix(string content, QRCorrectionLevel correctionLevel) { QREncoderMatrix matrix = Encode(content, correctionLevel); return(matrix); }
public static QREncoderMatrix CreateMatrix(string content, QRCorrectionLevel correctionLevel) { QREncoderMatrix matrix = Encode(content, correctionLevel); return matrix; }
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; }
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)"); }