Skip to content

Commit d48a2fb

Browse files
committed
Change MaskPattern.Patterns to a list
1 parent 14a83f2 commit d48a2fb

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

QRCoder/QRCodeGenerator.ModulePlacer.MaskPattern.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ private static class MaskPattern
1717
/// <summary>
1818
/// A dictionary mapping each mask pattern index to its corresponding function that calculates whether a given pixel should be masked.
1919
/// </summary>
20-
public static readonly Dictionary<int, Func<int, int, bool>> Patterns =
21-
new Dictionary<int, Func<int, int, bool>>(8) {
22-
{ 1, MaskPattern.Pattern1 }, {2, MaskPattern.Pattern2 }, {3, MaskPattern.Pattern3 }, {4, MaskPattern.Pattern4 },
23-
{ 5, MaskPattern.Pattern5 }, {6, MaskPattern.Pattern6 }, {7, MaskPattern.Pattern7 }, {8, MaskPattern.Pattern8 }
20+
public static readonly List<Func<int, int, bool>> Patterns =
21+
new List<Func<int, int, bool>>(8) {
22+
MaskPattern.Pattern1, MaskPattern.Pattern2, MaskPattern.Pattern3, MaskPattern.Pattern4,
23+
MaskPattern.Pattern5, MaskPattern.Pattern6, MaskPattern.Pattern7, MaskPattern.Pattern8
2424
};
2525

2626
/// <summary>

QRCoder/QRCodeGenerator.ModulePlacer.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,10 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
115115

116116
// Temporary QRCodeData object to test different mask patterns without altering the original.
117117
var qrTemp = new QRCodeData(version);
118-
foreach (var pattern in MaskPattern.Patterns)
118+
for (var maskPattern = 0; maskPattern < 8; maskPattern++)
119119
{
120+
var patternFunc = MaskPattern.Patterns[maskPattern];
121+
120122
// Reset the temporary QR code to the current state of the actual QR code.
121123
for (var y = 0; y < size; y++)
122124
{
@@ -127,7 +129,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
127129
}
128130

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

133135
// Place version information if applicable.
@@ -144,14 +146,14 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
144146
{
145147
if (!IsBlocked(new Rectangle(x, y, 1, 1), blockedModules))
146148
{
147-
qrTemp.ModuleMatrix[y][x] ^= pattern.Value(x, y);
148-
qrTemp.ModuleMatrix[x][y] ^= pattern.Value(y, x);
149+
qrTemp.ModuleMatrix[y][x] ^= patternFunc(x, y);
150+
qrTemp.ModuleMatrix[x][y] ^= patternFunc(y, x);
149151
}
150152
}
151153

152154
if (!IsBlocked(new Rectangle(x, x, 1, 1), blockedModules))
153155
{
154-
qrTemp.ModuleMatrix[x][x] ^= pattern.Value(x, x);
156+
qrTemp.ModuleMatrix[x][x] ^= patternFunc(x, x);
155157
}
156158
}
157159

@@ -160,7 +162,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
160162
// Select the pattern with the lowest score, indicating better QR code readability.
161163
if (!selectedPattern.HasValue || patternScore > score)
162164
{
163-
selectedPattern = pattern.Key;
165+
selectedPattern = maskPattern;
164166
patternScore = score;
165167
}
166168
}
@@ -182,7 +184,7 @@ public static int MaskCode(QRCodeData qrCode, int version, List<Rectangle> block
182184
qrCode.ModuleMatrix[x][x] ^= MaskPattern.Patterns[selectedPattern.Value](x, x);
183185
}
184186
}
185-
return selectedPattern.Value - 1;
187+
return selectedPattern.Value;
186188
}
187189

188190
/// <summary>

0 commit comments

Comments
 (0)