1

我已经使用 ZXing.net 生成了二维码,我想给生成的二维码上色。如何在 MVC.net 中使用 ZXing.net 为 QR 码着色?

代码如下

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);
                    }
                }

请有人告诉如何给颜色。

4

2 回答 2

1

我创建了一个 GitHub Repo “ColorZXing.Net”,基本上你可以生成单调颜色的二维码,或者全彩色的二维码。

GitHub:https ://github.com/HainanZhao/ColorZXing.Net

全彩色二维码

单调二维码

于 2020-09-06T12:59:36.167 回答
0

好吧,如果您只想要单一颜色(例如蓝色或任何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;
}
于 2019-03-10T07:29:37.317 回答