您的位置:首页 > 编程语言 > C#

C# 生成二维码图片(位深度可设) QRCode

2017-10-18 14:23 435 查看
网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快。但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴。这是本要用它做了一个项目后,简单的整理了一下。

组件下载地址:http://download.csdn.net/detail/lybwwp/6861821

   

下载文件包包含ThoughtWorks.QRCode.dll与dll的源码,强人可修改些源码。

字符串较长的情况下,用ThoughtWorks.QRCode生成二维码时出现“索引超出了数组界限”的错误。

解决方法:将 QRCodeVersion 改为0。

   Bitmap bs = Create_ImgCode(DNS, 2);//生成二维码bm

                //由于生成的二维码尺寸不符合要求对其像素进行修改和位深度进行修改

                int width = 64;

                int height = 64;

                Size s = new Size(width, height);

                Bitmap newBmp = new Bitmap(bs, s);//像素修改

                Bitmap Qcbmp = newBmp.Clone(new Rectangle(Point.Empty,newBmp.Size), PixelFormat.Format1bppIndexed);//位深度

                SaveImg(currentPath,Qcbmp);

                pictureBox1.Image =Qcbmp;

 

                pictureBox1.Refresh();

        ///

        /// 生成二维码图片

        ///

        /// 要生成二维码的字符串     

        /// 大小尺寸

        /// 二维码图片

        public Bitmap Create_ImgCode(string codeNumber, int size)

        {

            Bitmap image = null;

            //创建二维码生成类

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            //QRCodeEncoder encoder = new QRCodeEncoder();

            try

            {

                //设置编码模式

                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;

                //设置编码测量度

                qrCodeEncoder.QRCodeScale = size;

                //设置编码版本

                qrCodeEncoder.QRCodeVersion = 0;

                //颜色填充

                // qrCodeEncoder.QRCodeForegroundColor = Color.Black;

                // qrCodeEncoder.setStructureappend(10, 10, 10);

                // 设置编码错误纠正

                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;

                //生成二维码图片

                image = qrCodeEncoder.Encode(codeNumber);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            return image;

 

        }

   ///

        /// 图像转16进制(直接使用图片)

        ///

        ///

        ///

        public static string ImageToHex(Bitmap _Image)

        {

            string bmptohex = string.Empty;

            byte[] _ImageBytes;

            MemoryStream ms = new MemoryStream();

            _Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

            _ImageBytes = ms.GetBuffer();

            foreach (byte b in _ImageBytes)

            {

                string by = Convert.ToString(b, 16).ToString();

                if (by.Length == 1)

                    by = "0" + by;

                bmptohex += by;//将图片转16进制并用字符串表示      

            }

            ms.Dispose();

            _Image.Dispose();

            return bmptohex;

 

        }

  ///

        /// 图像转16进制

        ///

        /// 图片路径

        ///

        public static byte[] ImageToBuffer(string ImgPath)

        {

            byte[] _ImageBytes;

            if (File.Exists(ImgPath))

            {

                Image _Image = Image.FromFile(ImgPath);

                MemoryStream ms = new MemoryStream();

                _Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

                _ImageBytes = ms.GetBuffer();

                ms.Dispose();

                _Image.Dispose();

            }

            else

            {

                _ImageBytes = null;

            }

            return _ImageBytes;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: