做了個小項目,根據一些基本信息,生成二維碼圖片,並為二維碼圖片加上一幅圖片水印,然后導出。
1、生成二維碼
ZXing是一個開放源碼的,用Java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯系到其他語言的端口。Zxing可以實現使用手機的內置的攝像頭完成條形碼的掃描及解碼。該項目可實現的條形碼編碼和解碼。目標是能夠對QR編碼、Data Matrix、UPC的1D條形碼進行解碼。 其提供了多種平台下的客戶端包括:J2ME、J2SE和Android。---用來解碼QRcode。本文引用zxing.dll,生成二維碼。
引用命名空間:
using com.google.zxing.qrcode; using com.google.zxing; using com.google.zxing.common; using ByteMatrix = com.google.zxing.common.ByteMatrix; using EAN13Writer = com.google.zxing.oned.EAN13Writer; using EAN8Writer = com.google.zxing.oned.EAN8Writer; using MultiFormatWriter = com.google.zxing.MultiFormatWriter; using System.IO; using System.Collections;
生成二維碼:
private void btnGenerate_Click(object sender, EventArgs e) { ByteMatrix byteMatrix; string content = this.textBox1.Text; if (!string.IsNullOrEmpty(content)) { byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300); bitmap = ToBitmap(byteMatrix); } this.pictureBox1.Image = bitmap; mapCreate = bitmap; } public static Bitmap ToBitmap(ByteMatrix matrix) { int width = matrix.Width; int height = matrix.Height; Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF")); } } return bmap; }
加圖片水印:
//圖片水印處理方法 private Bitmap ImageWatermark(Bitmap map, string waterpath) { Image waterimg = Image.FromFile(waterpath); //添加水印 Graphics g = Graphics.FromImage(map); //獲取水印位置設置 ArrayList loca = new ArrayList(); int x = 0; int y = 0; x = map.Width / 2 - waterimg.Width / 2; y = map.Height / 2 - waterimg.Height / 2; loca.Add(x); loca.Add(y); //g.DrawImage(waterimg, new Rectangle(int.Parse(loca[0].ToString()), int.Parse(loca[1].ToString()), waterimg.Width, waterimg.Height)); g.DrawImage(waterimg, new Rectangle(int.Parse(loca[0].ToString()), int.Parse(loca[1].ToString()), 75, 75)); return map; }
導出:
先添加 saveFileDialog控件
private void btnOut_Click(object sender, EventArgs e) { try { saveFileDialog1.ShowDialog(); string fileName = saveFileDialog1.FileName; if (fileName != null) { mapCreate.Save(fileName);//mapCreate是bitmap格式的圖片 } } catch (Exception ex) { throw; } }