Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Shane32 committed May 1, 2024
1 parent 6d2f6a1 commit 061869c
Showing 1 changed file with 8 additions and 30 deletions.
38 changes: 8 additions & 30 deletions QRCoder/QRCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,29 +142,27 @@ public static QRCodeData GenerateQrCode(string plainText, ECCLevel eccLevel, boo
var codedText = PlainTextToBinary(plainText, encoding, eciMode, utf8BOM, forceUtf8);
var dataInputLength = GetDataLength(encoding, plainText, codedText, forceUtf8);
int version = requestedVersion;
int minVersion = GetVersion(dataInputLength + (eciMode != EciMode.Default ? 2 : 0), encoding, eccLevel);
if (version == -1)
{
version = GetVersion(dataInputLength + (eciMode != EciMode.Default ? 2 : 0), encoding, eccLevel);
version = minVersion;
}
else
{
//Version was passed as fixed version via parameter. Thus let's check if chosen version is valid.
var minVersion = GetVersion(dataInputLength + (eciMode != EciMode.Default ? 2 : 0), encoding, eccLevel);
if (minVersion > version)
{
var maxSizeByte = capacityTable[version - 1].Details.First(x => x.ErrorCorrectionLevel == eccLevel).CapacityDict[encoding];
throw new QRCoder.Exceptions.DataTooLongException(eccLevel.ToString(), encoding.ToString(), version, maxSizeByte);
}
}

var modeIndicatorLength = eciMode != EciMode.Default ? 16 : 4;
var countIndicatorLength = GetCountIndicatorLength(version, encoding);

var completeBitArrayLength =
(eciMode != EciMode.Default ? 16 : 4) + // Mode indicator
countIndicatorLength + // Count indicator
codedText.Length; // Data
var completeBitArrayLength = modeIndicatorLength + countIndicatorLength + codedText.Length;

var completeBitArray = new BitArray(completeBitArrayLength);

// write mode indicator
var completeBitArrayIndex = 0;
if (eciMode != EciMode.Default)
Expand Down Expand Up @@ -197,7 +195,9 @@ public static QRCodeData GenerateQrCode(byte[] binaryData, ECCLevel eccLevel)
int version = GetVersion(binaryData.Length, EncodingMode.Byte, eccLevel);

int countIndicatorLen = GetCountIndicatorLength(version, EncodingMode.Byte);
var bitArray = ToBitArray(binaryData, 4 + countIndicatorLen);
// Convert byte array to bit array, with prefix padding for mode indicator and count indicator
var bitArray = ToBitArray(binaryData, prefixZeros: 4 + countIndicatorLen);
// Add mode indicator and count indicator
var index = 0;
DecToBin((int)EncodingMode.Byte, 4, bitArray, ref index);
DecToBin(binaryData.Length, countIndicatorLen, bitArray, ref index);
Expand Down Expand Up @@ -274,28 +274,6 @@ private static QRCodeData GenerateQrCode(BitArray bitArray, ECCLevel eccLevel, i
DecToBin(codeBlock.ECCWords[i], 8, interleavedData, ref pos);
}


/*
var interleavedWordsSb = new StringBuilder();
for (var i = 0; i < Math.Max(eccInfo.CodewordsInGroup1, eccInfo.CodewordsInGroup2); i++)
{
foreach (var codeBlock in codeWordWithECC)
if (codeBlock.CodeWords.Count > i)
interleavedWordsSb.Append(codeBlock.CodeWords[i]);
}
for (var i = 0; i < eccInfo.ECCPerBlock; i++)
{
foreach (var codeBlock in codeWordWithECC)
if (codeBlock.ECCWords.Count > i)
interleavedWordsSb.Append(codeBlock.ECCWords[i]);
}
interleavedWordsSb.Append(new string('0', remainderBits[version - 1]));
var interleavedData = ToBitArray(interleavedWordsSb.ToString());
*/


//Place interleaved data on module matrix
var qr = new QRCodeData(version);
var blockedModules = new List<Rectangle>(17);
Expand Down

0 comments on commit 061869c

Please sign in to comment.