方便智慧型手機讀取資料及連結網站
QRCode 當初的設計就是希望能方便被讀取,希望節省輸入的時間
裡面最多可以藏入1800個中文字,可以提供的服務就相當廣泛....
QRCode 編碼&解碼方式其實沒有什麼機密
很多元件都已經都寫好,就因為是這樣才能廣泛的被利用
使用之前要先下載一個開放的函示庫(DLL) "Zxing"
解壓縮之後找到適合開發環境的版本
在裡面就可以看到 zxing.dll ,這這個檔案複製到開發的專案中
接著打開 Visual Studio 加入參考
這樣就設定完成了
接下來就可以開始寫程式了...(當然是要先拉一下畫面拉)
private void button1_Click(object sender, EventArgs e)
{
System.Drawing.Bitmap bitmap = null;
//要轉成QRCode 的內容
string content = textBox1.Text;
//QRCode的設定
ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new ZXing.QrCode.QrCodeEncodingOptions
{
//產生出圖片的高度
Height = 180,
//產生出圖片的寬度
Width = 180,
//文字是使用哪種編碼方式
CharacterSet = "UTF-8",
//錯誤修正容量
//L水平 7%的字碼可被修正
//M水平 15%的字碼可被修正
//Q水平 25%的字碼可被修正
//H水平 30%的字碼可被修正
ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H
}
};
//將要編碼的文字產生出QRCode的圖檔
bitmap = writer.Write(content);
//儲存圖片
bitmap.Save(@"D:\Test\QRCode\temp.png", System.Drawing.Imaging.ImageFormat.Png);
//顯示在畫面中
pictureBox1.Image = bitmap;
}
到這邊就可以產生出QRCode的圖檔了
編碼跟產生檔案很簡單就完成了
有發現產生的QRCode的複雜程度會跟裡面包含的文字長度成正比嗎?
解碼也一樣很簡單
private void button2_Click(object sender, EventArgs e)
{
System.Drawing.Bitmap bitmap = null;
//宣告 QRCode Reader 物件
ZXing.IBarcodeReader reader = new ZXing.BarcodeReader();
//讀取要解碼的圖片
FileStream fs = new FileStream(@"D:\Test\QRCode\temp.png", FileMode.Open);
Byte[] data = new Byte[fs.Length];
// 把檔案讀取到位元組陣列
fs.Read(data, 0, data.Length);
fs.Close();
// 實例化一個記憶體資料流 MemoryStream,將位元組陣列放入
MemoryStream ms = new MemoryStream(data);
// 將記憶體資料流的資料放到 BitMap的物件中
bitmap = (Bitmap)Image.FromStream(ms);
//將圖片顯示於 PictureBox 中
pictureBox2.Image = bitmap;
//進行解碼的動作
ZXing.Result result = reader.Decode(bitmap);
if (result != null)
{ //如果有成功解讀,則顯示文字
label1.Text = result.Text;
}
}
在讀取圖檔的時候有遇到一些問題
原本讀取的寫法是
bitmap = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(@"D:\Test\QRCode\temp.png");
這樣的寫法在讀取後要再產生新的圖片就會發生錯誤
研究了一下發現Image還在開啟的狀態,不能進行寫入的動作
所以一開始將圖片讀出來放到Memory就可以了
參考文獻: http://blog.miniasp.com/post/2009/05/30/A-generic-error-occurred-in-GDI-plus.aspx
很簡單就可以自己製作QRCode吧
雖然Google上可以找到很多工具可以使用
但是還是自己做比較有FU~~
下次就可以連結攝影機來解讀QRcode了!!
DEMO