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; } ///