diff --git a/QRCoder/QRCodeGenerator.ModulePlacer.MaskPattern.cs b/QRCoder/QRCodeGenerator.ModulePlacer.MaskPattern.cs
index 61aae144..995dd54f 100644
--- a/QRCoder/QRCodeGenerator.ModulePlacer.MaskPattern.cs
+++ b/QRCoder/QRCodeGenerator.ModulePlacer.MaskPattern.cs
@@ -17,10 +17,10 @@ private static class MaskPattern
///
/// A dictionary mapping each mask pattern index to its corresponding function that calculates whether a given pixel should be masked.
///
- public static readonly Dictionary> Patterns =
- new Dictionary>(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> Patterns =
+ new List>(8) {
+ MaskPattern.Pattern1, MaskPattern.Pattern2, MaskPattern.Pattern3, MaskPattern.Pattern4,
+ MaskPattern.Pattern5, MaskPattern.Pattern6, MaskPattern.Pattern7, MaskPattern.Pattern8
};
///
diff --git a/QRCoder/QRCodeGenerator.ModulePlacer.cs b/QRCoder/QRCodeGenerator.ModulePlacer.cs
index 28196f4f..53b8a859 100644
--- a/QRCoder/QRCodeGenerator.ModulePlacer.cs
+++ b/QRCoder/QRCodeGenerator.ModulePlacer.cs
@@ -115,8 +115,10 @@ public static int MaskCode(QRCodeData qrCode, int version, List 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++)
{
@@ -127,7 +129,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List 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.
@@ -144,14 +146,14 @@ public static int MaskCode(QRCodeData qrCode, int version, List 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);
}
}
@@ -160,7 +162,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List 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;
}
}
@@ -182,7 +184,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List block
qrCode.ModuleMatrix[x][x] ^= MaskPattern.Patterns[selectedPattern.Value](x, x);
}
}
- return selectedPattern.Value - 1;
+ return selectedPattern.Value;
}
///