Skip to content

Commit

Permalink
Change MaskPattern.Patterns to a list
Browse files Browse the repository at this point in the history
  • Loading branch information
Shane32 committed May 19, 2024
1 parent 14a83f2 commit d48a2fb
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
8 changes: 4 additions & 4 deletions QRCoder/QRCodeGenerator.ModulePlacer.MaskPattern.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ private static class MaskPattern
/// <summary>
/// A dictionary mapping each mask pattern index to its corresponding function that calculates whether a given pixel should be masked.
/// </summary>
public static readonly Dictionary<int, Func<int, int, bool>> Patterns =
new Dictionary<int, Func<int, int, bool>>(8) {
{ 1, MaskPattern.Pattern1 }, {2, MaskPattern.Pattern2 }, {3, MaskPattern.Pattern3 }, {4, MaskPattern.Pattern4 },
{ 5, MaskPattern.Pattern5 }, {6, MaskPattern.Pattern6 }, {7, MaskPattern.Pattern7 }, {8, MaskPattern.Pattern8 }
public static readonly List<Func<int, int, bool>> Patterns =
new List<Func<int, int, bool>>(8) {
MaskPattern.Pattern1, MaskPattern.Pattern2, MaskPattern.Pattern3, MaskPattern.Pattern4,
MaskPattern.Pattern5, MaskPattern.Pattern6, MaskPattern.Pattern7, MaskPattern.Pattern8
};

/// <summary>
Expand Down
16 changes: 9 additions & 7 deletions QRCoder/QRCodeGenerator.ModulePlacer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,10 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block

// Temporary QRCodeData object to test different mask patterns without altering the original.
var qrTemp = new QRCodeData(version);
foreach (var pattern in MaskPattern.Patterns)
for (var maskPattern = 0; maskPattern < 8; maskPattern++)
{
var patternFunc = MaskPattern.Patterns[maskPattern];

// Reset the temporary QR code to the current state of the actual QR code.
for (var y = 0; y < size; y++)
{
Expand All @@ -127,7 +129,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
}

// Place format information using the current mask pattern.
var formatStr = GetFormatString(eccLevel, pattern.Key - 1);
var formatStr = GetFormatString(eccLevel, maskPattern);
ModulePlacer.PlaceFormat(qrTemp, formatStr);

// Place version information if applicable.
Expand All @@ -144,14 +146,14 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
{
if (!IsBlocked(new Rectangle(x, y, 1, 1), blockedModules))
{
qrTemp.ModuleMatrix[y][x] ^= pattern.Value(x, y);
qrTemp.ModuleMatrix[x][y] ^= pattern.Value(y, x);
qrTemp.ModuleMatrix[y][x] ^= patternFunc(x, y);
qrTemp.ModuleMatrix[x][y] ^= patternFunc(y, x);
}
}

if (!IsBlocked(new Rectangle(x, x, 1, 1), blockedModules))
{
qrTemp.ModuleMatrix[x][x] ^= pattern.Value(x, x);
qrTemp.ModuleMatrix[x][x] ^= patternFunc(x, x);
}
}

Expand All @@ -160,7 +162,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
// Select the pattern with the lowest score, indicating better QR code readability.
if (!selectedPattern.HasValue || patternScore > score)
{
selectedPattern = pattern.Key;
selectedPattern = maskPattern;
patternScore = score;
}
}
Expand All @@ -182,7 +184,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
qrCode.ModuleMatrix[x][x] ^= MaskPattern.Patterns[selectedPattern.Value](x, x);
}
}
return selectedPattern.Value - 1;
return selectedPattern.Value;
}

/// <summary>
Expand Down

0 comments on commit d48a2fb

Please sign in to comment.