PCB Genesis加二维码 实现方式

使用incam可以很轻松的增加2维码,这里通过另外一种方式玩转二维码的加法,

使用谷歌zxing.dll类库实现,将文字信息转为bitmap点阵后,在Genesis绘制点即可。

一.incam增加二维码效果

二.通过代码增加方PAD实现效果:

三.代码实现:

    Genesis增加二维码代码

        private void addQR()
        {
            CodeHelper qr = new CodeHelper();
            Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
            hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//设置内容编码  
            hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);//错码率  L水平 7 %  M水平 15 %   Q水平 25 %  H水平 30 % 
            hint.Add(EncodeHintType.QR_VERSION, 11);//大小  (V-1)*4 + 21(V是版本号)
            hint.Add(EncodeHintType.MARGIN, 0);//边距
            ZXing.Common.BitMatrix codeArray = qr.enMatrix("at00101ca0", 61, 61, BarcodeFormat.QR_CODE, hint); //at00101ca0为增加二维码内容
            add add_ = new add();
            gPP gp = new gPP();
            gp.width = 500;//PAD大小
            gp.symbols = "s";//PAD形状为方PAD
            for (int x = 0; x < codeArray.Width; x++)
            {
                for (int y = 0; y < codeArray.Height; y++)
                {
                    if (codeArray[x, y])
                    {
                        gp.p.x = x * 0.5;
                        gp.p.y = y * 0.5;
                        add_.pad(gp); //增加方PAD PAD
                    }
                }
            }
        }

   zxing.dll重新封装后的二维码类

 public class CodeHelper
    {

        public string CHARSET  = "UTF-8";

        public static int SaveTo(Bitmap bitmap, string filepath, string filename)
        {
            try
            {
                bitmap.Save(filepath + filename); return 0;
            }
            catch (System.Exception ex)
            {
                return -1;
            }
        }
        /// <summary>
        ///字符转二维码
        /// </summary>
        /// <param name="content"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="barcodeFormat"></param>
        /// <param name="hints"></param>
        /// <returns></returns>
        public Bitmap encode(string content, int width, int height, BarcodeFormat barcodeFormat, IDictionary<EncodeHintType, object> hints)
        {
            BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height, hints);
            Bitmap bitmap = toBitmap(byteMatrix);
            return bitmap;
        }

        /// <summary>
        ///字符转二维码
        /// </summary>
        /// <param name="content"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="barcodeFormat"></param>
        /// <param name="hints"></param>
        /// <returns></returns>
        public string  enString(string content, int width, int height, BarcodeFormat barcodeFormat, IDictionary<EncodeHintType, object> hints)
        {
            BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height, hints);
            return toString(byteMatrix); 
        }
        /// <summary>
        ///字符转二维码
        /// </summary>
        /// <param name="content"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="barcodeFormat"></param>
        /// <param name="hints"></param>
        /// <returns></returns>
        public BitMatrix enMatrix(string content, int width, int height, BarcodeFormat barcodeFormat, IDictionary<EncodeHintType, object> hints)
        {
            BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height, hints);
            return byteMatrix;
        }
        /// <summary>
        /// 字符转二维码
        /// </summary>
        /// <param name="content"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="barcodeFormat"></param>
        /// <returns></returns>
        public Bitmap encode(string content, int width, int height, BarcodeFormat barcodeFormat)
        {
            BitMatrix byteMatrix = new MultiFormatWriter().encode(content, barcodeFormat, width, height);

            Bitmap bitmap = toBitmap(byteMatrix);
            return bitmap;
        }
        /// <summary>
        /// BitMatrix转Bitmap
        /// </summary>
        /// <param name="matrix"></param>
        /// <returns></returns>
        private static String  toString(BitMatrix matrix)
        {
            StringBuilder bitString = new StringBuilder();

            for (int x = 0; x < matrix.Width; x++)
            {
                bitString.Append("
");
                for (int y = 0; y < matrix.Height; y++)
                {
                    //bitmap.SetPixel(x, y, matrix[x, y] ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
                    bitString.Append(matrix[x, y] ? "" : "  ");
                }
            }
            return bitString.ToString ();
        }
        /// <summary>
        /// BitMatrix转Bitmap
        /// </summary>
        /// <param name="matrix"></param>
        /// <returns></returns>
        private static Bitmap toBitmap(BitMatrix matrix)
        {
            int width = matrix.Width;
            int height = matrix.Height;
            Bitmap bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    bitmap.SetPixel(x, y, matrix[x, y] ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
                }
            }
            return bitmap;
        }



        /// <summary>
        /// 字符转二维码并保存
        /// </summary>
        /// <param name="content"></param>
        /// <param name="path"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="barcodeFormat"></param>
        /// <returns></returns>
        public int encodeAndSave(string content, string path, int width, int height, BarcodeFormat barcodeFormat)
        {
            return SaveTo(encode(content, width, height, barcodeFormat), path, "");
        }
        /// <summary>
        /// bmp图片路径转换??
        /// </summary>
        /// <param name="bmppath"></param>
        /// <param name="hints"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static int decode(string bmppath, IDictionary<DecodeHintType, object> hints, out Result result)
        {
            Bitmap bmap = new Bitmap(bmppath);
            BitmapLuminanceSource source = new BitmapLuminanceSource(bmap);
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            result = new MultiFormatReader().decode(bitmap, hints);
            return 0;
        }
    }
原文地址:https://www.cnblogs.com/pcbren/p/9432764.html