From 40efee471d6c6340508691078137195a33730d3d Mon Sep 17 00:00:00 2001 From: clowwindy Date: Sun, 9 Nov 2014 14:57:58 +0800 Subject: [PATCH 1/2] refine qrcode --- shadowsocks-csharp/View/QRCodeForm.cs | 60 ++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/shadowsocks-csharp/View/QRCodeForm.cs b/shadowsocks-csharp/View/QRCodeForm.cs index 0a0ec840..a7b42daf 100755 --- a/shadowsocks-csharp/View/QRCodeForm.cs +++ b/shadowsocks-csharp/View/QRCodeForm.cs @@ -25,35 +25,51 @@ namespace Shadowsocks.View private void GenQR(string ssconfig) { string qrText = ssconfig; - QRCode4CS.QRCode qrCoded = new QRCode4CS.QRCode(6, QRErrorCorrectLevel.H); - qrCoded.AddData(qrText); - qrCoded.Make(); - int blockSize = 5; - Bitmap drawArea = new Bitmap((qrCoded.GetModuleCount() * blockSize), (qrCoded.GetModuleCount() * blockSize)); - for (int row = 0; row < qrCoded.GetModuleCount(); row++) + QRCode4CS.Options options = new QRCode4CS.Options(); + options.Text = qrText; + QRCode4CS.QRCode qrCoded = null; + bool success = false; + foreach (var level in new QRErrorCorrectLevel[]{QRErrorCorrectLevel.H, QRErrorCorrectLevel.Q, QRErrorCorrectLevel.M, QRErrorCorrectLevel.L}) { - for (int col = 0; col < qrCoded.GetModuleCount(); col++) + for (int i = 3; i < 10; i++) { - bool isDark = qrCoded.IsDark(row, col); - if (isDark) + try { - for (int y = 0; y < blockSize; y++) - { - int myCol = (blockSize * (col - 1)) + (y + blockSize); - for (int x = 0; x < blockSize; x++) - { - drawArea.SetPixel((blockSize * (row - 1)) + (x + blockSize), myCol, Color.Black); - } - } + options.TypeNumber = i; + options.CorrectLevel = level; + qrCoded = new QRCode4CS.QRCode(options); + qrCoded.Make(); + success = true; + break; + } + catch + { + qrCoded = null; + continue; } - else + } + if (success) + break; + } + if (qrCoded == null) + { + return; + } + int blockSize = Math.Max(200 / qrCoded.GetModuleCount(), 1); + Bitmap drawArea = new Bitmap((qrCoded.GetModuleCount() * blockSize), (qrCoded.GetModuleCount() * blockSize)); + using (Graphics g = Graphics.FromImage(drawArea)) + { + g.Clear(Color.White); + using (Brush b = new SolidBrush(Color.Black)) + { + for (int row = 0; row < qrCoded.GetModuleCount(); row++) { - for (int y = 0; y < blockSize; y++) + for (int col = 0; col < qrCoded.GetModuleCount(); col++) { - int myCol = (blockSize * (col - 1)) + (y + blockSize); - for (int x = 0; x < blockSize; x++) + bool isDark = qrCoded.IsDark(row, col); + if (isDark) { - drawArea.SetPixel((blockSize * (row - 1)) + (x + blockSize), myCol, Color.White); + g.FillRectangle(b, blockSize * row, blockSize * col, blockSize, blockSize); } } } From 212cf6b11aed9f814f54ae0aec963d04730e53f3 Mon Sep 17 00:00:00 2001 From: clowwindy Date: Sun, 9 Nov 2014 15:02:03 +0800 Subject: [PATCH 2/2] lint code --- shadowsocks-csharp/View/QRCodeForm.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/shadowsocks-csharp/View/QRCodeForm.cs b/shadowsocks-csharp/View/QRCodeForm.cs index a7b42daf..12c5b6fd 100755 --- a/shadowsocks-csharp/View/QRCodeForm.cs +++ b/shadowsocks-csharp/View/QRCodeForm.cs @@ -66,8 +66,7 @@ namespace Shadowsocks.View { for (int col = 0; col < qrCoded.GetModuleCount(); col++) { - bool isDark = qrCoded.IsDark(row, col); - if (isDark) + if (qrCoded.IsDark(row, col)) { g.FillRectangle(b, blockSize * row, blockSize * col, blockSize, blockSize); }