zxing二維碼的生成與解碼(C#)


ZXing是一個開源Java類庫用於解析多種格式的1D/2D條形碼。目標是能夠對QR編碼、Data Matrix、UPC的1D條形碼進行解碼。 其提供了多種平台下的客戶端包括:J2ME、J2SE和Android。

首先,在其官網http://code.google.com/p/zxing/上去下載源碼

編譯在其csharp目錄下打開zxing.csproj文件,新建一個工程。在編譯之前修改兩個錯誤:

 

源代碼中有兩處UTF-8的問題,會導致亂碼,

其一:com.google.zxing.qrcode.encoder.encoder類中的

internal const System.String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";

此處,將ISO-8859-1改為UTF-8

其二:com.google.zxing.qrcode.decoder.DecodedBitStreamParser類的成員

private const System.String UTF8 = "UTF8";

應將UTF8改為UTF-8

 

修改完之后,點重新生成編譯出新的dll文件。

將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;
private void button1_Click(object sender, EventArgs e)
{

string content = textBox1.Text;
ByteMatrix byteMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 200, 200);
Bitmap bitmap = toBitmap(byteMatrix);
pictureBox1.Image = bitmap;
//writeToFile(byteMatrix, System.Drawing.Imaging.ImageFormat.Png, sFD.FileName);
//SaveFileDialog sFD = new SaveFileDialog();
//sFD.DefaultExt = "*.png|*.png";
//sFD.AddExtension = true;
//try
//{
// if (sFD.ShowDialog() == DialogResult.OK)
// {
// }
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
//}

}
public static void writeToFile(ByteMatrix matrix, System.Drawing.Imaging.ImageFormat format, string file)
{
Bitmap bmap = toBitmap(matrix);
bmap.Save(file, format);
}
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 void button1_Click(object sender, EventArgs e) 
{ 
if (this.openFileDialog1.ShowDialog() != DialogResult.OK) 
{ 
return; 
} 
Image img = Image.FromFile(this.openFileDialog1.FileName); 
Bitmap bmap; 
try 
{ 
bmap = new Bitmap(img); 
} 
catch (System.IO.IOException ioe) 
{ 
MessageBox.Show(ioe.ToString()); 
return; 
} 
if (bmap == null) 
{ 
MessageBox.Show("Could not decode image"); 
return; 
} 
LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height); 
com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap(new COMMON.HybridBinarizer(source)); 
Result result; 
try 
{ 
result = new MultiFormatReader().decode(bitmap); 
} 
catch(ReaderException re) 
{ 
MessageBox.Show(re.ToString()); 
return; 
} 

MessageBox.Show(result.Text); 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM