protected void btnContactDetails_Click(object sender, EventArgs e)
        {
            string          code        = string.Concat(this.txtType.Text, ";", this.txtContactID.Text, ";", this.txtcontactname.Text, ";", this.txtcontactlastname.Text, this.txtDefaultCurrency.Text, this.txtalternateCurrency.Text, this.txtcontactDOB.Text, this.txtLanguage.Text);
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);

            System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
            imgBarCode.Height = 150;
            imgBarCode.Width  = 150;
            QRCode qrCode = new QRCode(qrCodeData);

            using (Bitmap bitMap = qrCode.GetGraphic(20))
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    byte[] byteImage = ms.ToArray();
                    imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                }
                plBarCode.Controls.Add(imgBarCode);
            }
        }
        protected void btnTrxP2B_Click(object sender, EventArgs e)
        {
            string          code        = string.Concat(this.txtp2bmerchantid.Text, ";", this.txtp2bAmount.Text, ";", this.txtp2bReference.Text, ";", this.ddlp2bCurrency.SelectedValue);
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(code, QRCodeGenerator.ECCLevel.Q);

            System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
            imgBarCode.Height = 150;
            imgBarCode.Width  = 150;
            QRCode qrCode = new QRCode(qrCodeData);

            using (Bitmap bitMap = qrCode.GetGraphic(20))
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    byte[] byteImage = ms.ToArray();
                    imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                }
                plBarCode.Controls.Add(imgBarCode);
            }
        }
예제 #3
0
        /// <summary>
        /// 绘制二维码
        /// </summary>
        /// <param name="unionid">存储内容id</param>
        /// <param name="url">存储内容</param>
        /// <param name="pixel">像素大小</param>
        /// <returns></returns>
        public Code InitCode(string unionid, string url, int pixel)
        {
            QRCodeData codeData = _generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.M, true);

            QRCoder.QRCode qrcode  = new QRCoder.QRCode(codeData);
            Bitmap         qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true);
            MemoryStream   stream  = new MemoryStream();

            qrImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            byte[]         bytedata = stream.ToArray();
            Code           code     = new Code();
            DateTimeOffset dto      = new DateTimeOffset(DateTime.Now);
            var            unixTime = dto.ToUnixTimeSeconds();

            code.Id      = unixTime.ToString();
            code.UnionId = unionid;
            code.Info    = url;
            code.Size    = pixel;
            code.CodeImg = bytedata;
            _codes.InsertOne(code);
            return(code);
        }
 public async Task <byte[]> GenerarQr(string texto, string colorOscuro, string colorClaro)
 {
     return(await Task.Factory.StartNew(() => {
         QRCodeGenerator qrGenerator = new QRCodeGenerator();
         QRCodeData qrData = qrGenerator.CreateQrCode(
             texto,
             QRCodeGenerator.ECCLevel.M
             );
         QRCode qrCode = new QRCode(qrData);
         Bitmap bitmap = qrCode.GetGraphic(
             pixeles_por_punto,
             DecodificarColor(colorOscuro),
             DecodificarColor(colorClaro),
             true
             );
         using (var ms = new MemoryStream())
         {
             bitmap.Save(ms, ImageFormat.Png);
             return ms.ToArray();
         }
     }));
 }
예제 #5
0
        public void MaterialQRCode(long storeId, long detailboxId)
        {
            Wms_stockoutdetail_box detailBox = _client.Queryable <Wms_stockoutdetail_box>()
                                               .First(c => c.DetailBoxId == detailboxId);

            Wms_stockoutdetail detail = _client.Queryable <Wms_stockoutdetail>()
                                        .First(c => c.StockOutDetailId == detailBox.StockOutDetailId);

            Wms_stockout stockout = _client.Queryable <Wms_stockout>()
                                    .First(c => c.StockOutId == detail.StockOutId);

            string dateStr = DateTime.Now.ToString("yyyyMMddhhmmssfff");
            string strQR   = $"{detail.UniqueIndex}@@{detailBox.StockInUniqueIndex}@@{dateStr}@@{detailBox.PlanQty} ";

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(
                strQR, QRCodeGenerator.ECCLevel.Q);
            QRCode qrCode      = new QRCode(qrCodeData);
            Bitmap qrCodeImage = qrCode.GetGraphic(20);

            qrCodeImage.Save(this.Response.Body, ImageFormat.Png);
        }
예제 #6
0
        // GET: Tables

        public async Task <IActionResult> Index()
        {
            if (User.Identity.IsAuthenticated == false)
            {
                return(RedirectToAction("Login", "Identity"));
            }


            using (MemoryStream ms = new MemoryStream())
            {
                QRCodeGenerator qrGenerator = new QRCodeGenerator();
                QRCodeData      qrCodeData  = qrGenerator.CreateQrCode("TEXT", QRCodeGenerator.ECCLevel.Q);
                QRCode          qrCode      = new QRCode(qrCodeData);
                using (Bitmap bitMap = qrCode.GetGraphic(20))
                {
                    bitMap.Save(ms, ImageFormat.Png);
                    var image = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
                    ViewBag.Code = image;
                }
            }
            return(View(await _context.Tables.ToListAsync()));
        }
예제 #7
0
        public ActionResult CreateCode(string key)
        {
            // 生成二维码的内容
            string          strCode     = string.Format("{0}{1}{2}", @"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e37ff182337cd1f&redirect_uri=http%3a%2f%2frodman.nat300.top%2fapi%2fwchart%2fCodeLogin&response_type=code&scope=snsapi_userinfo&state=", key, @"&connect_redirect=1#wechat_redirect");
            QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(strCode, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrcode      = new QRCode(qrCodeData);

            // qrcode.GetGraphic 方法可参考最下发“补充说明”
            Bitmap       qrCodeImage = qrcode.GetGraphic(5, Color.Black, Color.White, null, 15, 6, false);
            MemoryStream ms          = new MemoryStream();

            qrCodeImage.Save(ms, ImageFormat.Jpeg);

            // 如果想保存图片 可使用  qrCodeImage.Save(filePath);

            //// 响应类型
            //context.Response.ContentType = "image /Jpeg";
            ////输出字符流
            //context.Response.BinaryWrite(ms.ToArray());
            return(File(ms.ToArray(), "image/Jpeg"));
        }
예제 #8
0
        public ActionResult EventQR(int?id)
        {
            if (id == null)
            {
                return(new StatusCodeResult((int)HttpStatusCode.BadRequest));
            }

            using (MemoryStream ms = new MemoryStream())
            {
                QRCodeGenerator qrGenerator = new QRCodeGenerator();
                string          url         = urlGenerator.generateURL(id.Value, db);
                ViewBag.FeedbackURL = url;
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q);
                QRCode     qrCode     = new QRCode(qrCodeData);
                using (Bitmap bitMap = qrCode.GetGraphic(20))
                {
                    bitMap.Save(ms, ImageFormat.Png);
                    ViewBag.QRCodeImage = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
                }
            }
            return(View());
        }
예제 #9
0
        private void bt_pdf_Click(object sender, EventArgs e)
        {
            MySqlDataAdapter donnee = new MySqlDataAdapter();
            MySqlConnection  conn   = new MySqlConnection(_connectionString);

            conn.Open();
            string          sql = "select * from participant where Email = '" + cb_mail.Text + "'";
            MySqlCommand    cmd = new MySqlCommand(sql, conn);
            MySqlDataReader rdr = cmd.ExecuteReader();

            rdr.Read();
            string          prenom      = rdr.GetString(3);
            string          nom         = rdr.GetString(2);
            string          departement = rdr.GetString(4);
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(cb_mail.Text, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrCode      = new QRCode(qrCodeData);
            Bitmap          qrCodeImage = qrCode.GetGraphic(5);
            XImage          qrXimage    = qrCodeImage;
            PdfDocument     document    = new PdfDocument();

            document.Info.Title = prenom + cb_mail.Text;
            PdfPage   page  = document.AddPage();
            XGraphics gfx   = XGraphics.FromPdfPage(page);
            XFont     font  = new XFont("Code 128", 60, XFontStyle.Regular);
            XFont     font2 = new XFont("LEMONMILK-Bold", 60, XFontStyle.Regular);

            gfx.DrawImage(qrXimage, 240, 300);
            gfx.DrawString(nom + " " + prenom, font2, XBrushes.Black,
                           new XRect(0, -350, page.Width, page.Height),
                           XStringFormats.Center);
            gfx.DrawString(departement, font2, XBrushes.Black,
                           new XRect(0, -150, page.Width, page.Height),
                           XStringFormats.Center);
            string filename = prenom + nom + "badge.pdf";

            document.Save(filename);
            Process.Start(filename);
        }
예제 #10
0
        /// <summary>
        /// Generate a setup code for a Google Authenticator user to scan
        /// </summary>
        /// <param name="issuer">Issuer ID (the name of the system, i.e. 'MyApp'), can be omitted but not recommended https://github.com/google/google-authenticator/wiki/Key-Uri-Format </param>
        /// <param name="accountTitleNoSpaces">Account Title (no spaces)</param>
        /// <param name="accountSecretKey">Account Secret Key as byte[]</param>
        /// <param name="QRPixelsPerModule">Number of pixels per QR Module (2 = ~120x120px QRCode)</param>
        /// <returns>SetupCode object</returns>
        public SetupCode GenerateSetupCode(string issuer, string accountTitleNoSpaces, byte[] accountSecretKey, int QRPixelsPerModule, bool generateQrCode = true)
        {
            accountTitleNoSpaces = RemoveWhitespace(Uri.EscapeUriString(accountTitleNoSpaces));
            string encodedSecretKey = Base32Encoding.ToString(accountSecretKey);
            string provisionUrl;

            if (String.IsNullOrWhiteSpace(issuer))
            {
                provisionUrl = String.Format("otpauth://totp/{0}?secret={1}", accountTitleNoSpaces, encodedSecretKey.Trim('='));
            }
            else
            {
                //  https://github.com/google/google-authenticator/wiki/Conflicting-Accounts
                // Added additional prefix to account otpauth://totp/Company:[email protected] for backwards compatibility
                provisionUrl = String.Format("otpauth://totp/{2}:{0}?secret={1}&issuer={2}", accountTitleNoSpaces, encodedSecretKey.Trim('='), UrlEncode(issuer));
            }

            string qrCodeUrl = string.Empty;

            if (generateQrCode)
            {
                using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
                    using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(provisionUrl, QRCodeGenerator.ECCLevel.Q))
                        using (QRCode qrCode = new QRCode(qrCodeData))
                            using (Bitmap qrCodeImage = qrCode.GetGraphic(QRPixelsPerModule))
                                using (MemoryStream ms = new MemoryStream())
                                {
                                    qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

                                    qrCodeUrl = String.Format("data:image/png;base64,{0}", Convert.ToBase64String(ms.ToArray()));
                                }
            }

            return(new SetupCode(accountTitleNoSpaces, encodedSecretKey.Trim('='), qrCodeUrl)
            {
                ProvisionUrl = provisionUrl
            });
        }
예제 #11
0
        public ContactDetail(Person paPerson, string paDepartment, string paRoom)
        {
            InitializeComponent();
            LFirstName.Content  = paPerson.FirstName;
            LLastName.Content   = paPerson.LastName;
            LPhone.Content      = paPerson.Phone;
            LEmail.Content      = paPerson.Email;
            LDepartment.Content = paDepartment;
            LRoom.Content       = paRoom;

            PayloadGenerator.ContactData generator = new PayloadGenerator.ContactData(PayloadGenerator.ContactData.ContactOutputType.VCard3,
                                                                                      paPerson.FirstName, paPerson.LastName, null, paPerson.Phone, null, null, paPerson.Email);
            string payload = generator.ToString();


            QRCodeGenerator qrGenerator    = new QRCodeGenerator();
            QRCodeData      qrCodeData     = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrCode         = new QRCode(qrCodeData);
            var             qrCodeAsBitmap = qrCode.GetGraphic(20);

            using (var memory = new MemoryStream())
            {
                qrCodeAsBitmap.Save(memory, ImageFormat.Png);
                memory.Position = 0;

                var bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.StreamSource = memory;
                bitmapImage.CacheOption  = BitmapCacheOption.OnLoad;
                bitmapImage.EndInit();
                bitmapImage.Freeze();

                ImageQR.Source = bitmapImage;
            }

            ImageQR.Stretch = Stretch.Uniform;
            //ImageQR.Source = retval;
        }
예제 #12
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (Request.QueryString.Count > 0)
     {
         string title = Request.QueryString["title"] ?? "";
         string sn    = Request.QueryString["sn"] ?? "";
         string pId   = Request.QueryString["pId"] ?? "";
         string lId   = Request.QueryString["lId"] ?? "";
         if (pId.Length > 0)
         {
             Page.Title              = title;
             Page.MetaDescription    = title;
             promotionImage.ImageUrl = "FileServer/EddystonePromotion/" + pId + ".png";
         }
         if (pId.Length > 0 && lId.Length > 0)
         {
             QRCodeGenerator qrGenerator = new QRCodeGenerator();
             var             text        = lId + "-" + pId + "-" + Guid.NewGuid().ToString().Replace("-", "");
             QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q);
             QRCode          qrCode      = new QRCode(qrCodeData);
             Bitmap          qrCodeImage = qrCode.GetGraphic(20);
             System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
             imgBarCode.Height   = 180;
             imgBarCode.Width    = 180;
             imgBarCode.CssClass = "image2";
             using (Bitmap bitMap = qrCode.GetGraphic(20))
             {
                 using (MemoryStream ms = new MemoryStream())
                 {
                     bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                     byte[] byteImage = ms.ToArray();
                     imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                 }
                 plBarCode.Controls.Add(imgBarCode);
             }
         }
     }
 }
예제 #13
0
        private static void LitwoOjczyzno1do40()
        {
            QRCodeGenerator qrGenerator = new QRCodeGenerator();

            int version = 1;

            for (int i = 1; i < 2955; i++)
            {
                int verCalc = 0;
                try {
                    verCalc = QRCodeGenerator.GetVersion(i, EncodingMode.Byte, ECCLevel.L);
                }
                catch (Exception)
                {
                    verCalc = 41;
                }

                if (version < verCalc)
                {
                    QRCodeData qrCodeData = qrGenerator.CreateQrCode(
                        Litwo.Substring(0, i - 1),
                        QRCodeGenerator.ECCLevel.L,
                        requestedVersion: version);;

                    QRCode qrc = new QRCode(qrCodeData);

                    int px = 370 / (21 + (4 * version));

                    Console.WriteLine(version + "  ,  " + (i - 1));

                    var b = qrc.GetGraphic(px, new ColorProviders.ColorProviderBW());
                    b.Save(String.Format("litwo{0:00}.png", version));


                    version++;
                }
            }
        }
예제 #14
0
        private static void DataWordAnim()
        {
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            int             frame       = 240;

            while (true)
            {
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(
                    "👨‍🏭",
                    QRCodeGenerator.ECCLevel.H,
                    true,
                    //requestedVersion: 2,
                    forcedpattern: -1,
                    maxBits: frame,
                    doMasking: true
                    );


                QRCode qrc = new QRCode(qrCodeData);

                var b = qrc.GetGraphic(
                    20,
                    //new ColorProviders.ColorProviderRysowankiAnim()
                    //new ColorProviderBW()
                    new ColorProviders.ColorProviderDebug2()
                    , drawQuietZones: true
                    );
                b.Save(String.Format("anim_x{0:000}.png", frame));


                if (frame++ > 240)
                //if (frame++ > qrCodeData.DataWordsLen)
                {
                    Console.WriteLine(frame);
                    break;
                }
            }
        }
예제 #15
0
        public IActionResult Post(string postId)
        {
            var instanceMain = _repos.GetSingleDataById(postId);
            var instanceSend = new PostViewModel()
            {
                ID                      = instanceMain.ID,
                ContentHtml             = instanceMain.ContentHtml,
                ContentInBrief          = instanceMain.ContentInBrief,
                Title                   = instanceMain.Title,
                PostPictureName         = instanceMain.PostPictureName,
                LastModifiedDateAndTime = instanceMain.LastModifiedDateAndTime
            };

            instanceSend.Barcode = GetPostBrcode();
            return(View(instanceSend));

            Byte[] GetPostBrcode()
            {
                QRCodeGenerator qrGenerator = new QRCodeGenerator();

                ViewData["Url"] = Microsoft.AspNetCore.Http.Extensions.UriHelper.GetDisplayUrl(Request);
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(ViewData["Url"].ToString(),
                                                                 QRCodeGenerator.ECCLevel.Q);
                QRCode qrCode      = new QRCode(qrCodeData);
                Bitmap qrCodeImage = qrCode.GetGraphic(20);

                return(GetImageBytesByBitmap(qrCodeImage));

                Byte[] GetImageBytesByBitmap(Bitmap img)
                {
                    using (MemoryStream stream = new MemoryStream())
                    {
                        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                        return(stream.ToArray());
                    }
                }
            }
        }
예제 #16
0
        private void GenerateQRFromText(string text)
        {
            try
            {
                // Creating the elements here
                QRCodeGenerator qrGenerator = new QRCodeGenerator();
                QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q);
                QRCode          qrCode      = new QRCode(qrCodeData);
                Bitmap          qrCodeImage = qrCode.GetGraphic(20);

                // If user checks the check box saves the image with default name
                if (save_image_text == true)
                {
                    using (FolderBrowserDialog f = new FolderBrowserDialog())
                    {
                        if (f.ShowDialog() == DialogResult.OK)
                        {
                            qrCodeImage.Save(Path.Combine(f.SelectedPath, "qr-code-text.png"));
                        }
                    }
                }

                // show image
                pictureBoxText.Image = qrCodeImage;

                // free ram
                qrGenerator.Dispose();
                qrCodeData.Dispose();
                qrCode.Dispose();
            }
            //If ex is catched displat
            //TODO : Custom Mess
            // Not more showing the message but an fix for this error
            catch (Exception e)
            {
                MetroSetMessageBox.Show(this, "An error : " + e.Message, "QR Creator");
            }
        }
예제 #17
0
        private void CreateBody(int participantId, Camp regCamp, RegistrationType regType)
        {
            pageBody  = "<p><b>" + txtCharacterName.Text + "</b>,</p>";
            pageBody += "<p>Thank you for registering to attend <b>Ragnarok XXXIV</b>";
            if (regType.IsMerchant)
            {
                pageBody += " as a merchant";
            }
            pageBody += "!</p>";

            if (regCamp.Id != 0)
            {
                pageBody += "<p>You are marked down as an attendee staying in <b>" + regCamp.CampName + "</b>. If your camp changes, please contact ";
                pageBody += "<a href=\"mailto:[email protected]\">[email protected]</a> to change your camp, or you can change it ";
                pageBody += "when you arrive at Ragnarok.</p>";
            }
            else
            {
                pageBody += "<p>You are marked down as not having a camp selected yet. If you choose a camp, please contact ";
                pageBody += "<a href=\"mailto:[email protected]\">[email protected]</a> to select your camp, or you can select your ";
                pageBody += "camp when you arrive at Ragnarok.</p>";
            }

            pageBody += "<p>Your selected arrival date is <b>" + regType.ArrivalDate.ToString("MM/dd/yyyy") + "</b>.</p>";

            QRCodeGenerator  qrGenerator = new QRCodeGenerator();
            QRCodeData       qrCodeData  = qrGenerator.CreateQrCode("http://dagorhirragnarok.com/CheckIn.aspx?pid=" + participantId, QRCodeGenerator.ECCLevel.Q);
            BitmapByteQRCode qrCode      = new BitmapByteQRCode(qrCodeData);

            qrCodeBytes = qrCode.GetGraphic(20);

            string imgSource = "data:image/png;base64," + Convert.ToBase64String(qrCodeBytes, Base64FormattingOptions.None);

            pageBody += "<p>For expedited check-in at Troll when you arrive at Ragnarok, please present this QR Code to the Troll staff:</p>";
            pageBody += "<center><p><img style=\"height: 300px; width: 300px;\" src=\"" + imgSource + "\" /></p></center>";
            pageBody += "<p>We look forward to seeing you at Ragnarok!</p>";
            pageBody += "<p>----------------------------------------------<br />Troll</p>";
        }
예제 #18
0
        /// <summary>
        /// 创建二维码返回文件路径名称
        /// </summary>
        /// <param name="plainText">二维码内容</param>
        public static string CreateQRCodeToFile(string plainText)
        {
            try
            {
                string fileName = "";
                if (String.IsNullOrEmpty(plainText))
                {
                    return("");
                }

                //二维码文件目录
                string filePath = System.Web.HttpContext.Current.Server.MapPath("~/") + "QRCoder\\";

                if (!Directory.Exists(filePath))
                {
                    Directory.CreateDirectory(filePath);
                }
                string name = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(100, 1000) + ".jpeg";
                //创建二维码文件路径名称
                fileName = filePath + name;

                QRCodeGenerator qrGenerator = new QRCodeGenerator();
                //QRCodeGenerator.ECCLevel:纠错能力,Q级:约可纠错25%的数据码字
                QRCodeData qrCodeData  = qrGenerator.CreateQrCode(plainText, QRCodeGenerator.ECCLevel.Q);
                QRCode     qrcode      = new QRCode(qrCodeData);
                Bitmap     qrCodeImage = qrcode.GetGraphic(15);
                qrCodeImage.Save(fileName, ImageFormat.Jpeg);

                //生成 http绝对路径
                string relativeUrl = ConfigurationManager.AppSettings["ImageQRCode"].ToString();
                string httpPath    = relativeUrl + name;
                return(httpPath);
            }
            catch (Exception ex)
            {
                throw new Exception("创建二维码返回文件路径名称方法异常", ex);
            }
        }
예제 #19
0
        public ActionResult Index()
        {
            try
            {
                int    userid = HomeController.UserId;   //Get userid of logged in user
                string room   = Request.Query["roomid"]; //Get roomid from url parameter

                var request = HttpContext.Request;
                using (MemoryStream ms = new MemoryStream()) //QR-code generation
                {
                    QRCodeGenerator qrGenerator = new QRCodeGenerator();

                    QRCodeData qrCodeData = qrGenerator.CreateQrCode("https://145.24.222.130" + request.Path + "?RoomId=" + room, QRCodeGenerator.ECCLevel.Q);
                    QRCode     qrCode     = new QRCode(qrCodeData);


                    using (Bitmap qrCodeImage = qrCode.GetGraphic(20))
                    {
                        qrCodeImage.Save(ms, ImageFormat.Png);
                        ViewBag.QRCodeImage = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
                    }
                }

                Database        db      = new Database();                       // Make instance of database class
                List <string[]> results = db.getReservations(room);             // Get reservation from database object and store returned values in List of string []'s
                var             json    = JsonConvert.SerializeObject(results); //Convert previous list of string []'s to json object
                ViewData["results"] = json;                                     //Hands over json object to view

                return(View());                                                 //View gets returned with viewdata
            }
            catch (Exception e)                                                 //Exception catcher
            {
                Debug.WriteLine("Index Schedule Exception: {0}", e);
                return(RedirectToAction("Error", "Home"));

                throw;
            }
        }
        public void InsertQrCodePurchaseInfo(int userId, int productId)
        {
            var    product      = productRepository.Read(productId);
            var    user         = userRepository.Read(userId);
            string purchaseInfo = $"At {DateTime.Now.ToShortTimeString()} {user.UserName} " +
                                  $"purchased {product.ProductName}";

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(purchaseInfo, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrCode      = new QRCode(qrCodeData);
            Bitmap          qrCodeImage = qrCode.GetGraphic(20);

            using (MemoryStream ms = new MemoryStream())
            {
                qrCodeImage.Save(ms, ImageFormat.Png);
                qrCodeRepository.Insert(new QrCodeEntity()
                {
                    UserId     = userId,
                    QrCodeType = QrCodeType.TextEncodedQrCode,
                    Content    = ms.ToArray()
                });
            }
        }
        public static void GenQRCode(String message, String Code)
        {
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            Cloudinary      _cloudinary = new Cloudinary(new Account("dpciaiobf", "546941639243358", "-clBvD99twwKZUYzhb2eLQDt7SU"));

            QRCodeData qrCodeData  = qrGenerator.CreateQrCode(message, QRCodeGenerator.ECCLevel.Q);
            QRCode     qrCode      = new QRCode(qrCodeData);
            Bitmap     qrCodeImage = qrCode.GetGraphic(20);

            System.IO.MemoryStream stream = new MemoryStream();
            qrCodeImage.Save(stream, ImageFormat.Png);

            var bytes = ((MemoryStream)stream).ToArray();

            System.IO.Stream  inputStream = new MemoryStream(bytes);
            ImageUploadParams a           = new ImageUploadParams
            {
                File     = new FileDescription(Guid.NewGuid().ToString(), inputStream),
                PublicId = Code
            };

            _cloudinary.Upload(a);
        }
        public void QRCodeTerminalAsAscii()
        {
            WechahtyEvent.Subscribe <EventScanPayload>(async(eventData) =>
            {
                if (eventData.Status == ScanStatus.Waiting || eventData.Status == ScanStatus.Timeout)
                {
                    await Task.Run(() =>
                    {
                        string qrcodeImageUrl = GetWechatGithubQrCode(eventData.Qrcode);

                        Url generator  = new Url(qrcodeImageUrl);
                        string payload = generator.ToString();

                        QRCodeGenerator qrGenerator = new QRCodeGenerator();
                        QRCodeData qrCodeData       = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.L);

                        AsciiQRCode qrCodeAsi   = new AsciiQRCode(qrCodeData);
                        string qrCodeAsAsciiArt = qrCodeAsi.GetGraphic(1);
                        Console.WriteLine(qrCodeAsAsciiArt);
                    });
                }
            });
        }
예제 #23
0
        public static string GenerateQRCode(IWebHostEnvironment environment, string message)
        {
            string root     = environment.WebRootPath + "\\qrcode";
            string fileName = Guid.NewGuid().ToString() + ".png";
            string path     = Path.Combine(root, fileName);

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(message, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrCode      = new QRCode(qrCodeData);
            Bitmap          qrCodeImage = qrCode.GetGraphic(20);

            using (MemoryStream memory = new MemoryStream())
            {
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
                {
                    qrCodeImage.Save(memory, ImageFormat.Png);
                    byte[] bytes = memory.ToArray();
                    fs.Write(bytes, 0, bytes.Length);
                }
            }

            return(fileName);
        }
예제 #24
0
        public bool GenerarQR(String RFCEmisor, String RFCReceptor, String Total)
        {
            bool Resultado = false;

            QRTexto = "https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx?&" + "id=" + UUID + "&fe=" + SelloCFD.Substring(SelloCFD.Length - 8, 8) + "&re=" + RFCEmisor + "&rr=" + RFCReceptor + "&tt=" + Total;

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(QRTexto, QRCodeGenerator.ECCLevel.M);
            QRCode          qrCode      = new QRCode(qrCodeData);

            System.IO.MemoryStream mem = new System.IO.MemoryStream();
            EncoderParameters      encoderParameters = new EncoderParameters(1);

            encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 75L);
            qrCode.GetGraphic(20).Save(mem, GetEncoder(ImageFormat.Jpeg), encoderParameters);
            QR        = mem.ToArray();
            Resultado = true;
            mem.Close();
            mem.Dispose();
            qrCode.Dispose();
            GC.WaitForFullGCComplete();
            return(Resultado);
        }
예제 #25
0
        public static void  GenerateSave(string guid, string value)
        {
            Guid path = Guid.NewGuid();

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(value, QRCodeGenerator.ECCLevel.Q);
            Base64QRCode    qrCode      = new Base64QRCode(qrCodeData);
            string          fpath       = Path.Combine(HostingEnvironment.MapPath("~/Content/QR"), guid + ".png");

            string qrCodeImage = qrCode.GetGraphic(20);

            if (File.Exists(fpath))
            {
                File.Delete(fpath);
            }
            File.WriteAllBytes(fpath, Convert.FromBase64String(qrCodeImage));
            // byte[] data = Convert.FromBase64String(qrCodeImage);
            //using (Image image = Image.FromStream(new MemoryStream(data, 0, data.Length)))
            // {

            //    image.Save(fpath, ImageFormat.Png);  // Or Png
            //   }
        }
예제 #26
0
파일: Form1.cs 프로젝트: HighEndGuy/QRCoder
        private void RenderQrCode()
        {
            string level = comboBoxECC.SelectedItem.ToString();

            QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);
            using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
            {
                using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(textBoxQRCode.Text, eccLevel))
                {
                    using (QRCode qrCode = new QRCode(qrCodeData))
                    {
                        pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20, Color.Black, Color.White,
                                                                             GetIconBitmap(), (int)iconSize.Value);

                        this.pictureBoxQRCode.Size = new System.Drawing.Size(pictureBoxQRCode.Width, pictureBoxQRCode.Height);
                        //Set the SizeMode to center the image.
                        this.pictureBoxQRCode.SizeMode = PictureBoxSizeMode.CenterImage;

                        pictureBoxQRCode.SizeMode = PictureBoxSizeMode.StretchImage;
                    }
                }
            }
        }
예제 #27
0
    protected void lnkGenerateQRCode_Click(object sender, EventArgs e)
    {
        LinkButton lnk  = sender as LinkButton;
        string     data = "BA50D346-71E3-4146-8356-484685C98C39";// lnk.CommandArgument; // heleleik static qoyduq

        QRCodeGenerator qrGenerator = new QRCodeGenerator();
        QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(data, QRCodeGenerator.ECCLevel.Q);
        QRCode          qrCode      = new QRCode(qrCodeData);
        Bitmap          qrCodeImage = qrCode.GetGraphic(20);

        Response.Clear();
        Response.BufferOutput = false;
        string fileName = $"{data}.jpg";

        Response.ContentType = "application/jpeg";
        Response.AddHeader("content-disposition", $"attachment; filename={fileName}");

        using (MemoryStream stream = new MemoryStream())
        {
            qrCodeImage.Save(Response.OutputStream, ImageFormat.Jpeg);
        }
        Response.End();
    }
예제 #28
0
        private void RenderQrCode(string _QRname, string _qr)
        {
            QRCodeGenerator qrGenerator = new QRCodeGenerator();

            QRCodeData qrCodeData = qrGenerator.CreateQrCode(_qr, QRCodeGenerator.ECCLevel.Q);

            QRCode qrCode = new QRCode(qrCodeData);

            string filePath = @"C:\Users\Public\Pictures\" + _QRname.Replace("|", "").ToString().Trim() + ".png";

            Bitmap bitMap = qrCode.GetGraphic(20);

            System.Windows.Controls.Image imgBarCode = new System.Windows.Controls.Image();
            imgBarCode.Height = 150;
            imgBarCode.Width  = 150;

            using (MemoryStream ms = new MemoryStream())
            {
                bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                byte[] byteImage = ms.ToArray();
                bitMap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
            }
        }
예제 #29
0
        // GET: Home/Create
        public ActionResult Register()
        {
            //generate a string like this
            //otpauth://totp/Example:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=Example

            //secret that has 16 chars A-Z, not 0, not 1, but 2-7
            string secret  = RandomBase32String(16);
            string otpauth = "otpauth://totp/CoolApplication:someaccount?secret=" +
                             secret + "&issuer=CoolApplication";

            //to generate a QR code
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(otpauth, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrCode      = new QRCode(qrCodeData);
            Bitmap          qrCodeImage = qrCode.GetGraphic(20);
            ImageConverter  converter   = new ImageConverter();

            ViewBag.QRCode    = (byte[])converter.ConvertTo(qrCodeImage, typeof(byte[]));
            Session["secret"] = secret;


            return(View());
        }
예제 #30
0
        public void Gener(string text)
        {
            //QRCodeGenerator qrGenerator = new QRCodeGenerator();
            //QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.M);
            //QRCode qrCode = new QRCode(qrCodeData);
            //Bitmap qrCodeImage = qrCode.GetGraphic(8, Color.Black, Color.White, icon: ((Bitmap)Bitmap.FromFile(Server.MapPath("~/logo.jpg"))));

            QRCoder.PayloadGenerator.OneTimePassword generator = new QRCoder.PayloadGenerator.OneTimePassword()
            {
                Secret = "pwq6 5q55",
                Issuer = "Google",
                Label  = "*****@*****.**",
            };
            string payload = generator.ToString();

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q);
            QRCode          qrCode      = new QRCode(qrCodeData);
            var             qrCodeImage = qrCode.GetGraphic(8);

            Response.ClearContent();
            qrCodeImage.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);;
        }
예제 #31
0
 public static void PlaceTimingPatterns(ref QRCodeData qrCode, ref List<Rectangle> blockedModules)
 {
     var size = qrCode.ModuleMatrix.Count;
     for (int i = 8; i < size - 8; i++)
     {
         if (i % 2 == 0)
         {
             qrCode.ModuleMatrix[6][i] = true;
             qrCode.ModuleMatrix[i][6] = true;
         }
     }
     blockedModules.AddRange(new Rectangle[]{
         new Rectangle(6, 8, 1, size-16),
         new Rectangle(8, 6, size-16, 1)
     });
 }
예제 #32
0
 public static void AddQuietZone(ref QRCodeData qrCode)
 {
     bool[] quietLine = new bool[qrCode.ModuleMatrix.Count + 8];
     for (int i = 0; i < quietLine.Length; i++)
         quietLine[i] = false;
     for (int i = 0; i < 4; i++)
         qrCode.ModuleMatrix.Insert(0, new BitArray(quietLine));
     for (int i = 0; i < 4; i++)
         qrCode.ModuleMatrix.Add(new BitArray(quietLine));
     for (int i = 4; i < qrCode.ModuleMatrix.Count - 4; i++)
     {
         bool[] quietPart = new bool[4] { false, false, false, false };
         List<bool> tmpLine = new List<bool>(quietPart);
         foreach (bool module in qrCode.ModuleMatrix[i])
             tmpLine.Add(module);
         tmpLine.AddRange(quietPart);
         qrCode.ModuleMatrix[i] = new BitArray(tmpLine.ToArray());
     }
 }
예제 #33
0
 public static void PlaceFormat(ref QRCodeData qrCode, string formatStr)
 {
     var size = qrCode.ModuleMatrix.Count;
     var fStr = new string(formatStr.Reverse().ToArray());
     int[,] modules = new int[15, 4] { { 8, 0, size - 1, 8 }, { 8, 1, size - 2, 8 }, { 8, 2, size - 3, 8 }, { 8, 3, size - 4, 8 }, { 8, 4, size - 5, 8 }, { 8, 5, size - 6, 8 }, { 8, 7, size - 7, 8 }, { 8, 8, size - 8, 8 }, { 7, 8, 8, size - 7 }, { 5, 8, 8, size - 6 }, { 4, 8, 8, size - 5 }, { 3, 8, 8, size - 4 }, { 2, 8, 8, size - 3 }, { 1, 8, 8, size - 2 }, { 0, 8, 8, size - 1 } };
     for (int i = 0; i < 15; i++)
     {
         var p1 = new Point(modules[i, 0], modules[i, 1]);
         var p2 = new Point(modules[i, 2], modules[i, 3]);
         qrCode.ModuleMatrix[p1.Y][p1.X] = fStr[i] == '1' ? true : false;
         qrCode.ModuleMatrix[p2.Y][p2.X] = fStr[i] == '1' ? true : false;
     }
 }
예제 #34
0
            public static void PlaceVersion(ref QRCodeData qrCode, string versionStr)
            {
                var size = qrCode.ModuleMatrix.Count;
                var vStr = new string(versionStr.Reverse().ToArray());

                for (int x = 0; x < 6; x++)
                {
                    for (int y = 0; y < 3; y++)
                    {
                        qrCode.ModuleMatrix[y + size - 11][x] = vStr[x * 3 + y] == '1' ? true : false;
                        qrCode.ModuleMatrix[x][y + size - 11] = vStr[x * 3 + y] == '1' ? true : false;
                    }
                }
            }
예제 #35
0
            public static void PlaceFinderPatterns(ref QRCodeData qrCode, ref List<Rectangle> blockedModules)
            {
                var size = qrCode.ModuleMatrix.Count;
                int[] locations = { 0, 0, size - 7, 0, 0, size - 7 };

                for (int i = 0; i < 6; i = i + 2)
                {
                    for (int x = 0; x < 7; x++)
                    {
                        for (int y = 0; y < 7; y++)
                        {
                            if (!(((x == 1 || x == 5) && y > 0 && y < 6) || (x > 0 && x < 6 && (y == 1 || y == 5))))
                            {
                                qrCode.ModuleMatrix[y + locations[i + 1]][x + locations[i]] = true;
                            }
                        }
                    }
                    blockedModules.Add(new Rectangle(locations[i], locations[i + 1], 7, 7));
                }
            }
예제 #36
0
 public static void PlaceDataWords(ref QRCodeData qrCode, string data, ref List<Rectangle> blockedModules)
 {
     var size = qrCode.ModuleMatrix.Count;
     var up = true;
     var datawords = new Queue<bool>();
     data.ToList().ForEach(x => datawords.Enqueue(x == '0' ? false : true));
     for (int x = size - 1; x >= 0; x = x - 2)
     {
         if (x == 7 || x == 6)
             x = 5;
         for (int yMod = 1; yMod <= size; yMod++)
         {
             int y = 0;
             if (up)
             {
                 y = size - yMod;
                 if (datawords.Count > 0 && !IsBlocked(new Rectangle(x, y, 1, 1), blockedModules))
                     qrCode.ModuleMatrix[y][x] = datawords.Dequeue();
                 if (datawords.Count > 0 && x > 0 && !IsBlocked(new Rectangle(x - 1, y, 1, 1), blockedModules))
                     qrCode.ModuleMatrix[y][x - 1] = datawords.Dequeue();
             }
             else
             {
                 y = yMod - 1;
                 if (datawords.Count > 0 && !IsBlocked(new Rectangle(x, y, 1, 1), blockedModules))
                     qrCode.ModuleMatrix[y][x] = datawords.Dequeue();
                 if (datawords.Count > 0 && x > 0 && !IsBlocked(new Rectangle(x - 1, y, 1, 1), blockedModules))
                     qrCode.ModuleMatrix[y][x - 1] = datawords.Dequeue();
             }
         }
         up = !up;
     }
 }
예제 #37
0
 public static void PlaceDarkModule(ref QRCodeData qrCode, int version, ref List<Rectangle> blockedModules)
 {
     qrCode.ModuleMatrix[4 * version + 9][8] = true;
     blockedModules.Add(new Rectangle(8, 4 * version + 9, 1, 1));
 }
예제 #38
0
            public static void PlaceAlignmentPatterns(ref QRCodeData qrCode, List<Point> alignmentPatternLocations, ref List<Rectangle> blockedModules)
            {
                foreach (var loc in alignmentPatternLocations)
                {
                    var alignmentPatternRect = new Rectangle(loc.X, loc.Y, 5, 5);
                    var blocked = false;
                    foreach (var blockedRect in blockedModules)
                    {
                        if (Intersects(alignmentPatternRect, blockedRect))
                        {
                            blocked = true;
                            break;
                        }
                    }
                    if (blocked)
                        continue;

                    for (int x = 0; x < 5; x++)
                    {
                        for (int y = 0; y < 5; y++)
                        {
                            if (y == 0 || y == 4 || x == 0 || x == 4 || (x == 2 && y == 2))
                            {
                                qrCode.ModuleMatrix[loc.Y + y][loc.X + x] = true;
                            }
                        }
                    }
                    blockedModules.Add(new Rectangle(loc.X, loc.Y, 5, 5));
                }
            }
예제 #39
0
            public static int MaskCode(ref QRCodeData qrCode, int version, ref List<Rectangle> blockedModules)
            {
                var patternName = string.Empty;
                var patternScore = 0;

                var size = qrCode.ModuleMatrix.Count;

                foreach (var pattern in typeof(MaskPattern).GetMethods())
                {
                    if (pattern.Name.Length == 8 && pattern.Name.Substring(0, 7) == "Pattern")
                    {
                        QRCodeData qrTemp = new QRCodeData(version);
                        for (int y = 0; y < size; y++)
                        {
                            for (int x = 0; x < size; x++)
                            {
                                qrTemp.ModuleMatrix[y][x] = qrCode.ModuleMatrix[y][x];
                            }

                        }

                        for (int x = 0; x < size; x++)
                        {
                            for (int y = 0; y < size; y++)
                            {
                                if (!IsBlocked(new Rectangle(x, y, 1, 1), blockedModules))
                                {
                                    qrTemp.ModuleMatrix[y][x] ^= (bool)pattern.Invoke(null, new object[] { x, y });
                                }
                            }
                        }

                        var score = MaskPattern.Score(ref qrTemp);
                        if (string.IsNullOrEmpty(patternName) || patternScore > score)
                        {
                            patternName = pattern.Name;
                            patternScore = score;
                        }

                    }
                }
                var patterMethod = typeof(MaskPattern).GetMethods().First(x => x.Name == patternName);
                for (int x = 0; x < size; x++)
                {
                    for (int y = 0; y < size; y++)
                    {
                        if (!IsBlocked(new Rectangle(x, y, 1, 1), blockedModules))
                        {
                            qrCode.ModuleMatrix[y][x] ^= (bool)patterMethod.Invoke(null, new object[] { x, y });
                        }
                    }
                }
                return Convert.ToInt32(patterMethod.Name.Substring(patterMethod.Name.Length - 1, 1)) - 1;
            }
예제 #40
0
                public static int Score(ref QRCodeData qrCode)
                {
                    var score = 0;
                    var size = qrCode.ModuleMatrix.Count;

                    //Penalty 1
                    for (int y = 0; y < size; y++)
                    {
                        var modInRow = 0;
                        var modInColumn = 0;
                        var lastValRow = qrCode.ModuleMatrix[y][0];
                        var lastValColumn = qrCode.ModuleMatrix[0][y];
                        for (int x = 0; x < size; x++)
                        {
                            if (qrCode.ModuleMatrix[y][x] == lastValRow)
                                modInRow++;
                            else
                                modInRow = 1;
                            if (modInRow == 5)
                                score += 3;
                            else if (modInRow > 5)
                                score++;
                            lastValRow = qrCode.ModuleMatrix[y][x];

                            if (qrCode.ModuleMatrix[x][y] == lastValColumn)
                                modInColumn++;
                            else
                                modInColumn = 1;
                            if (modInColumn == 5)
                                score += 3;
                            else if (modInColumn > 5)
                                score++;
                            lastValColumn = qrCode.ModuleMatrix[x][y];
                        }
                    }

                    //Penalty 2
                    for (int y = 0; y < size - 1; y++)
                    {
                        for (int x = 0; x < size - 1; x++)
                        {
                            if (qrCode.ModuleMatrix[y][x] == qrCode.ModuleMatrix[y][x + 1] &&
                                qrCode.ModuleMatrix[y][x] == qrCode.ModuleMatrix[y + 1][x] &&
                                qrCode.ModuleMatrix[y][x] == qrCode.ModuleMatrix[y + 1][x + 1])
                                score += 3;
                        }
                    }

                    //Penalty 3
                    for (int y = 0; y < size; y++)
                    {
                        for (int x = 0; x < size - 10; x++)
                        {
                            if ((qrCode.ModuleMatrix[y][x] &&
                                !qrCode.ModuleMatrix[y][x + 1] &&
                                qrCode.ModuleMatrix[y][x + 2] &&
                                qrCode.ModuleMatrix[y][x + 3] &&
                                qrCode.ModuleMatrix[y][x + 4] &&
                                !qrCode.ModuleMatrix[y][x + 5] &&
                                qrCode.ModuleMatrix[y][x + 6] &&
                                !qrCode.ModuleMatrix[y][x + 7] &&
                                !qrCode.ModuleMatrix[y][x + 8] &&
                                !qrCode.ModuleMatrix[y][x + 9] &&
                                !qrCode.ModuleMatrix[y][x + 10]) ||
                                (!qrCode.ModuleMatrix[y][x] &&
                                !qrCode.ModuleMatrix[y][x + 1] &&
                                !qrCode.ModuleMatrix[y][x + 2] &&
                                !qrCode.ModuleMatrix[y][x + 3] &&
                                qrCode.ModuleMatrix[y][x + 4] &&
                                !qrCode.ModuleMatrix[y][x + 5] &&
                                qrCode.ModuleMatrix[y][x + 6] &&
                                qrCode.ModuleMatrix[y][x + 7] &&
                                qrCode.ModuleMatrix[y][x + 8] &&
                                !qrCode.ModuleMatrix[y][x + 9] &&
                                qrCode.ModuleMatrix[y][x + 10]))
                            {
                                score += 40;
                            }

                            if ((qrCode.ModuleMatrix[x][y] &&
                                !qrCode.ModuleMatrix[x + 1][y] &&
                                qrCode.ModuleMatrix[x + 2][y] &&
                                qrCode.ModuleMatrix[x + 3][y] &&
                                qrCode.ModuleMatrix[x + 4][y] &&
                                !qrCode.ModuleMatrix[x + 5][y] &&
                                qrCode.ModuleMatrix[x + 6][y] &&
                                !qrCode.ModuleMatrix[x + 7][y] &&
                                !qrCode.ModuleMatrix[x + 8][y] &&
                                !qrCode.ModuleMatrix[x + 9][y] &&
                                !qrCode.ModuleMatrix[x + 10][y]) ||
                                (!qrCode.ModuleMatrix[x][x] &&
                                !qrCode.ModuleMatrix[x + 1][y] &&
                                !qrCode.ModuleMatrix[x + 2][y] &&
                                !qrCode.ModuleMatrix[x + 3][y] &&
                                qrCode.ModuleMatrix[x + 4][y] &&
                                !qrCode.ModuleMatrix[x + 5][y] &&
                                qrCode.ModuleMatrix[x + 6][y] &&
                                qrCode.ModuleMatrix[x + 7][y] &&
                                qrCode.ModuleMatrix[x + 8][y] &&
                                !qrCode.ModuleMatrix[x + 9][y] &&
                                qrCode.ModuleMatrix[x + 10][y]))
                            {
                                score += 40;
                            }
                        }
                    }

                    //Penalty 4
                    var blackModules = 0;
                    foreach (var row in qrCode.ModuleMatrix)
                        foreach (bool bit in row)
                            if (bit)
                                blackModules++;

                    var percent = (blackModules / (qrCode.ModuleMatrix.Count * qrCode.ModuleMatrix.Count)) * 100;
                    if (percent % 5 == 0)
                        score += Math.Min((Math.Abs(percent - 55) / 5), (Math.Abs(percent - 45) / 5)) * 10;
                    else
                        score += Math.Min((Math.Abs((int)Math.Floor((decimal)percent / 5) - 50) / 5), (Math.Abs(((int)Math.Floor((decimal)percent / 5) + 5) - 50) / 5)) * 10;

                    return score;
                }
예제 #41
0
        public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool utf8BOM = false)
        {
            var encoding = GetEncodingFromPlaintext(plainText);
            var codedText = PlainTextToBinary(plainText, encoding, utf8BOM);
            var dataInputLength = GetDataLength(encoding, plainText, codedText);
            var version = GetVersion(dataInputLength, encoding, eccLevel);

            var modeIndicator = DecToBin((int)encoding, 4);
            var countIndicator = DecToBin(dataInputLength, GetCountIndicatorLength(version, encoding));
            var bitString = modeIndicator + countIndicator;

            bitString += codedText;

            //Fill up data code word
            var eccInfo = capacityECCTable.Single(x => x.Version == version && x.ErrorCorrectionLevel.Equals(eccLevel));
            var dataLength = eccInfo.TotalDataCodewords * 8;
            var lengthDiff = dataLength - bitString.Length;
            if (lengthDiff > 0)
                bitString += new string('0', Math.Min(lengthDiff, 4));
            if ((bitString.Length % 8) != 0)
                bitString += new string('0', 8 - (bitString.Length % 8));
            while (bitString.Length < dataLength)
                bitString += "1110110000010001";
            if (bitString.Length > dataLength)
                bitString = bitString.Substring(0, dataLength);

            //Calculate error correction words
            List<CodewordBlock> codeWordWithECC = new List<CodewordBlock>();
            for (int i = 0; i < eccInfo.BlocksInGroup1; i++)
            {
                var bitStr = bitString.Substring(i * eccInfo.CodewordsInGroup1 * 8, eccInfo.CodewordsInGroup1 * 8);
                codeWordWithECC.Add(new CodewordBlock()
                {
                    BitString = bitStr,
                    BlockNumber = i + 1,
                    GroupNumber = 1,
                    CodeWords = BinaryStringToBitBlockList(bitStr),
                    ECCWords = CalculateECCWords(bitStr, eccInfo)
                });
            }
            bitString = bitString.Substring(eccInfo.BlocksInGroup1 * eccInfo.CodewordsInGroup1 * 8);
            for (int i = 0; i < eccInfo.BlocksInGroup2; i++)
            {
                var bitStr = bitString.Substring(i * eccInfo.CodewordsInGroup2 * 8, eccInfo.CodewordsInGroup2 * 8);
                codeWordWithECC.Add(new CodewordBlock()
                {
                    BitString = bitStr,
                    BlockNumber = i + 1,
                    GroupNumber = 2,
                    CodeWords = BinaryStringToBitBlockList(bitStr),
                    ECCWords = CalculateECCWords(bitStr, eccInfo)
                });
            }

            //Interleave code words
            StringBuilder interleavedWordsSb = new StringBuilder();
            for (int i = 0; i < Math.Max(eccInfo.CodewordsInGroup1, eccInfo.CodewordsInGroup2); i++)
            {
                foreach (var codeBlock in codeWordWithECC)
                    if (codeBlock.CodeWords.Count > i)
                        interleavedWordsSb.Append(codeBlock.CodeWords[i]);
            }

            for (int i = 0; i < eccInfo.ECCPerBlock; i++)
            {
                foreach (var codeBlock in codeWordWithECC)
                    if (codeBlock.ECCWords.Count > i)
                        interleavedWordsSb.Append(codeBlock.ECCWords[i]);
            }
            interleavedWordsSb.Append(new string('0', remainderBits[version - 1]));
            var interleavedData = interleavedWordsSb.ToString();

            //Place interleaved data on module matrix
            QRCodeData qr = new QRCodeData(version);
            List<Rectangle> blockedModules = new List<Rectangle>();
            ModulePlacer.PlaceFinderPatterns(ref qr, ref blockedModules);
            ModulePlacer.ReserveSeperatorAreas(qr.ModuleMatrix.Count, ref blockedModules);
            ModulePlacer.PlaceAlignmentPatterns(ref qr, alignmentPatternTable.Where(x => x.Version == version).Select(x => x.PatternPositions).First(), ref blockedModules);
            ModulePlacer.PlaceTimingPatterns(ref qr, ref blockedModules);
            ModulePlacer.PlaceDarkModule(ref qr, version, ref blockedModules);
            ModulePlacer.ReserveVersionAreas(qr.ModuleMatrix.Count, version, ref blockedModules);
            ModulePlacer.PlaceDataWords(ref qr, interleavedData, ref blockedModules);
            var maskVersion = ModulePlacer.MaskCode(ref qr, version, ref blockedModules);
            var formatStr = GetFormatString(eccLevel, maskVersion);

            ModulePlacer.PlaceFormat(ref qr, formatStr);
            if (version >= 7)
            {
                var versionString = GetVersionString(version);
                ModulePlacer.PlaceVersion(ref qr, versionString);
            }
            ModulePlacer.AddQuietZone(ref qr);
            return qr;
        }