Как раскрасить QR-код с помощью Zxing.net - PullRequest
0 голосов
/ 01 мая 2018

Я сгенерировал QR-код, используя ZXing.net, я хочу придать цвет генерируемому QR-коду. Как придать цвет QR-коду с помощью ZXing.net в MVC.net?

Код, как показано ниже

IBarcodeWriter barcodeWriter = new BarcodeWriter
                {
                    Format = BarcodeFormat.QR_CODE,
                    Options = new QrCodeEncodingOptions
                    {
                        Width = 400,
                        Height = 400
                    }


                };

                var result = barcodeWriter.Write(qrcode);
                var barcodeBitmap = new Bitmap(result);
                #region code for text
                //RectangleF rectf = new RectangleF(0, 0, barcodeBitmap.Width, barcodeBitmap.Height);
                //Graphics g = Graphics.FromImage(barcodeBitmap);

                //g.SmoothingMode = SmoothingMode.AntiAlias;
                //g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                //g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                //StringFormat format = new StringFormat()
                //{
                //    Alignment = StringAlignment.Center,
                //    LineAlignment = StringAlignment.Center
                //};
                //// Draw the text onto the image
                //g.DrawString("Vaishali", new Font("Tahoma", 8), Brushes.Red, rectf,format);
                #endregion

                #region code for logo
                System.Drawing.Image logo = System.Drawing.Image.FromFile(Server.MapPath("~/image") + "/logo.png");

                int left = (barcodeBitmap.Width / 2) - (logo.Width / 2);
                int top = (barcodeBitmap.Height / 2) - (logo.Height / 2);

                Graphics g = Graphics.FromImage(barcodeBitmap);

                g.DrawImage(logo, new Point(left, top));
                #endregion
                using (MemoryStream memory = new MemoryStream())
                {
                    using (FileStream fs = new FileStream(barcodePath, FileMode.Create, FileAccess.ReadWrite))
                    {

                        barcodeBitmap.Save(memory, ImageFormat.Jpeg);
                        byte[] bytes = memory.ToArray();
                        fs.Write(bytes, 0, bytes.Length);
                    }
                }

Пожалуйста, кто-нибудь подскажет, как дать цвет.

1 Ответ

0 голосов
/ 10 марта 2019

Ну, вы можете попробовать таким образом, если вы хотите только один цвет (например, синий цвет или любое значение hexadecimal)

  private Bitmap generate() {
    Map<EncodeHintType, Object> hintsMap = new HashMap<>();
    hintsMap.put(EncodeHintType.CHARACTER_SET, "utf-8");
    hintsMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);
    hintsMap.put(EncodeHintType.MARGIN, 2);
    int mWidth = 100;
    int mHeight = 100;
    try {
        BitMatrix bitMatrix = new QRCodeWriter().encode(finalText, BarcodeFormat.QR_CODE, mWidth, mHeight, hintsMap);
        int[] pixels = new int[mWidth * mHeight];
        for (int i = 0; i < mHeight; i++) {
            for (int j = 0; j < mWidth; j++) {
                if (bitMatrix.get(j, i)) {// True if is is Black
                    pixels[i * mWidth + j] = 0xFFFFFFFF; //White
                } else {
                    pixels[i * mWidth + j] = 0x282946; //Insert the color here. 
                }
            }
        }
        Bitmap bitmap1 = Bitmap.createBitmap(pixels, mWidth, mHeight, Bitmap.Config.ARGB_8888);
        //SaveImage(bitmap1);
        return bitmap1;
    } catch (WriterException e) {
        e.printStackTrace();
    }
    return null;
}
...