diff --git a/QRCoder/SvgQRCode.cs b/QRCoder/SvgQRCode.cs index 63b66968..ab807b77 100644 --- a/QRCoder/SvgQRCode.cs +++ b/QRCoder/SvgQRCode.cs @@ -40,30 +40,24 @@ public string GetGraphic(Size viewBox, Color darkColor, Color lightColor, bool d } public string GetGraphic(Size viewBox, string darkColorHex, string lightColorHex, bool drawQuietZones = true) - { - var svgFile = new StringBuilder(@""); - var drawableModulesCount = this.QrCodeData.ModuleMatrix.Count - (drawQuietZones ? 0 : 8); - var unitsPerModule = Math.Round(Convert.ToDouble(Math.Min(viewBox.Width, viewBox.Height)) / drawableModulesCount,4); - if (unitsPerModule * drawableModulesCount > viewBox.Width) - unitsPerModule -= 0.0001; - var offset = drawQuietZones ? 4 * unitsPerModule : 0; - var offsetModules = drawQuietZones ? 0 : 4; - var qrSize = unitsPerModule * drawableModulesCount; - - svgFile.AppendLine($@""); - int xi = 0, yi = 0; - for (var x = 0d; x < qrSize; x = x + unitsPerModule) + { + var offset = drawQuietZones ? 0 : 4; + var drawableModulesCount = this.QrCodeData.ModuleMatrix.Count - (drawQuietZones ? 0 : offset * 2); + var pixelsPerModule = (double)Math.Min(viewBox.Width, viewBox.Height) / (double)drawableModulesCount; + var qrSize = drawableModulesCount * pixelsPerModule; + var svgFile = new StringBuilder($@""); + svgFile.AppendLine($@""); + for (int xi = offset; xi < offset + drawableModulesCount; xi++) { - yi = 0; - for (var y = 0d; y < qrSize; y = y + unitsPerModule) + for (int yi = offset; yi < offset + drawableModulesCount; yi++) { - if (this.QrCodeData.ModuleMatrix[yi + offsetModules][xi + offsetModules]) + if (this.QrCodeData.ModuleMatrix[xi][yi]) { - svgFile.AppendLine($@""); + var x = (xi - offset) * pixelsPerModule; + var y = (yi - offset) * pixelsPerModule; + svgFile.AppendLine($@""); } - yi++; } - xi++; } svgFile.Append(@""); return svgFile.ToString();