Skip to content

Commit 9967c6d

Browse files
committed
Fixed last line rendering in small AsciiQrCode renderer
1 parent af88109 commit 9967c6d

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

QRCoder/ASCIIQRCode.cs

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -86,40 +86,39 @@ public string GetGraphic(bool drawQuietZones = true, bool invert = false, string
8686
};
8787

8888
var moduleData = QrCodeData.ModuleMatrix;
89-
var lineBuilder = new StringBuilder();
89+
var sbSize = (moduleData.Count + endOfLine.Length) * (int)Math.Ceiling(moduleData.Count / 2.0) - 1;
90+
var lineBuilder = new StringBuilder(sbSize);
9091

9192
var quietZonesModifier = (drawQuietZones ? 0 : 8);
9293
var quietZonesOffset = (int)(quietZonesModifier * 0.5);
93-
var sideLength = (QrCodeData.ModuleMatrix.Count - quietZonesModifier);
94+
var sideLength = (moduleData.Count - quietZonesModifier);
9495

9596
for (var row = 0; row < sideLength; row += 2)
9697
{
9798
for (var col = 0; col < sideLength; col++)
9899
{
99-
try
100-
{
101-
var current = moduleData[col + quietZonesOffset][row + quietZonesOffset] ^ invert;
102-
var nextRowId = row + quietZonesOffset + 1;
100+
var current = moduleData[col + quietZonesOffset][row + quietZonesOffset] ^ invert;
101+
var nextRowId = row + quietZonesOffset + 1;
103102

104-
// Set next to whitespace "color"
105-
var next = false ^ invert;
106-
// Fill next with value, if in data range
107-
if (nextRowId < QrCodeData.ModuleMatrix.Count)
108-
next = moduleData[col + quietZonesOffset][nextRowId] ^ invert;
103+
// Set next to whitespace "color"
104+
var next = BLACK;
105+
// Fill next with value, if in data range
106+
if (nextRowId < QrCodeData.ModuleMatrix.Count)
107+
next = moduleData[col + quietZonesOffset][nextRowId] ^ invert;
109108

110-
if (current == WHITE && next == WHITE)
111-
lineBuilder.Append(palette.WHITE_ALL);
112-
else if (current == WHITE && next == BLACK)
113-
lineBuilder.Append(palette.WHITE_BLACK);
114-
else if (current == BLACK && next == WHITE)
115-
lineBuilder.Append(palette.BLACK_WHITE);
116-
else
117-
lineBuilder.Append(palette.BLACK_ALL);
118-
}
109+
if (current == WHITE && next == WHITE)
110+
lineBuilder.Append(palette.WHITE_ALL);
111+
else if (current == WHITE && next == BLACK)
112+
lineBuilder.Append(palette.WHITE_BLACK);
113+
else if (current == BLACK && next == WHITE)
114+
lineBuilder.Append(palette.BLACK_WHITE);
115+
else
116+
lineBuilder.Append(palette.BLACK_ALL);
119117
}
120-
lineBuilder.Append(endOfLine);
118+
if (row + 2 < sideLength)
119+
lineBuilder.Append(endOfLine);
121120
}
122-
return lineBuilder.ToString().Trim(endOfLine.ToCharArray());
121+
return lineBuilder.ToString();
123122
}
124123
}
125124

@@ -133,5 +132,13 @@ public static string GetQRCode(string plainText, int pixelsPerModule, string dar
133132
using (var qrCode = new AsciiQRCode(qrCodeData))
134133
return qrCode.GetGraphic(pixelsPerModule, darkColorString, whiteSpaceString, drawQuietZones, endOfLine);
135134
}
135+
136+
public static string GetQRCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1, string endOfLine = "\n", bool drawQuietZones = true, bool invert = true)
137+
{
138+
using (var qrGenerator = new QRCodeGenerator())
139+
using (var qrCodeData = qrGenerator.CreateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion))
140+
using (var qrCode = new AsciiQRCode(qrCodeData))
141+
return qrCode.GetGraphic(drawQuietZones, invert, endOfLine);
142+
}
136143
}
137144
}

0 commit comments

Comments
 (0)