Zint 库:Zint库的编译及使用(二维码QrCode生码),MFC/VC使用实例
1.Zint庫的使用手冊
https://github.s3.amazonaws.com/downloads/zint/zint/zint_manual_242.pdf
大家沒事沒人會去看這個文檔的,因為是英文的而且都是專業術語,一般人看不懂且也不想去看,我們用zint庫也就是用來生個碼,可能是二維碼,可能是一維碼等等。但是呢,我建議你通讀一遍,不然很可能在使用zint庫的時候常常因為某個參數值問題而停滯。
?
2.zint庫的資源下載
?
下載zint源碼:? ?https://sourceforge.net/p/zint/code/ci/master/tree/
?
zint庫的編譯依賴于兩個庫:zlib和libpng,需要說明的是這兩個庫是編譯才需要,使用時并不需要
?
下載zlib庫源碼:??http://www.zlib.net
?
下載libpng庫源碼:??https://sourceforge.net/projects/libpng/
?
三個文件下載后解壓并進行改名:
?
3.編譯zlib/lpng庫
lpng1637\projects\vstudio\vstudio.sln打開,我用的是VS2015
?
編譯libpng和zlib:編譯成功后你可以得到?libpng16.dll?libpng16.lib??zlib.lib
如果編譯過程中出現找不到文件的錯誤,請檢查文件夾名稱是否正確,各個版本的不一樣,請參照zlib
?
在D盤新建一個文件夾opt,并在此目錄下新建include,lib兩個文件夾,并拷貝文件進來
?
4.編譯zint庫
打開:zint-code\win32\zint.sln
libzint增加包含目錄:
zint增加附加庫目錄
zint增加附加依賴庫:
?
在libzint工程下右鍵,選擇添加現有項,選擇zint-code\backend目錄下所有的.h和.c,然后添加。避免編譯出錯
如果出現? 未定義的標識符 alloc_ ,在出現此問題的*.c文件中增加:?#include <malloc.h>
?
編譯:會生成?zintd.dll? ?libzint.lib
?
?
5.VC(MFC)使用Zint庫生成二維碼(支持中文漢字),并生成bmp文件
動態調用方式需要三個文件:zintd.dll? ?libzint.lib? ?zint.h
二維碼的設置需要如下幾個參數:
scale??放大倍數
option_1 依賴于symbology,不同編碼有不同意義
option_2 依賴于symbology,不同編碼有不同意義
symbology??編碼類型,在手冊上有描述,如二維碼是58
output_options 有無邊框之類的控制
show_hrt 在圖片上顯示可讀信息,如果設置為1,則text必須含有內容。
text 圖片上顯示的文字信息,配合show_hrt使用。
input_mode 決定編碼格式,二進制流,還是ASCII,亦或是UTF8。
#include "zint.h" #pragma comment(lib, "libzint.lib")BOOL GenerateBarcode(const char * szText, int len) {struct zint_symbol * symbol;int ret = 0;if (!szText){return FALSE;}TRY{symbol = ZBarcode_Create();if (symbol != NULL){symbol->scale = 2;symbol->option_1 = 3; //容錯級別symbol->option_2 = 10; //版本,決定圖片大小symbol->symbology = BARCODE_QRCODE;symbol->output_options = 0;symbol->show_hrt = 0; //可顯示信息,如果設置為1,則需要設置text值symbol->input_mode = DATA_MODE;strcpy(symbol->outfile, "TempQr.bmp");ret = ZBarcode_Encode(symbol, (unsigned char *)szText, len); //編碼if (ret != 0){AfxMessageBox(("ZBarcode_Encode err: %s", symbol->errtxt));ZBarcode_Delete(symbol);return FALSE;}ret = ZBarcode_Print(symbol, 0); //antate angle 旋轉角度ZBarcode_Delete(symbol);return TRUE;}else{AfxMessageBox(("ZBarcode_Create err: %s", symbol->errtxt));return FALSE;}}CATCH(CException, e){char szErr[256] = {0};e->GetErrorMessage(szErr, 255);AfxMessageBox(("GenerateBarcode exception: %s", szErr));return FALSE;}END_CATCH }? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
6.專業術語解釋
名詞解釋:
1. Symbol,可以看成是編碼之后生成的一張圖?
 2. Symbology,代表一種編碼方法。每種條碼都有自己的編碼標準。?
 3. Linear,應該是長條狀的碼,例如條形碼。?
 4. Stacked,包含多個長條狀碼的碼,例如 PDF417?
 5. Matrix,二維碼,包括 QR、Maxicode 等等?
 6. x-dimension,最小模塊的大小,通常是最小模塊的寬,因為條碼的模塊大小有固定的長寬比,通過寬就能計算出長。對于條形碼來說,x-dimension 表示一列的寬(像素大小);對于二維碼來說,x-dimension 表示一個模塊的寬(像素大小)
重要參數:
生成QRCODE時會用到的幾個參數:
1、TZintSymbol.symbology 條碼類型,本例中使用BARCODE_QRCODE,對應的值為58,更多條碼類型參考zint.h頭文件中的定義
2、TZintSymbol.option_1 容錯級別。對應的值為1、2、3、4 ,也就是LEVEL_L、LEVEL_M、LEVEL_Q、LEVEL_H
3、TZintSymbol.option_2 圖像大小,取值范圍為1 - 40,數值越大生成的圖像越大,有些例子稱之為版本version。
4、TZintSymbol.input_mode 輸入類型,取值范圍0、1、2、3、4,分別表示DATA_MODE、UNICODE_MODE、GS1_MODE、KANJI_MODE、SJIS_MODE;默認值為0,即DATA_MODE。建議處理中文時使用DATA_MODE,并將輸入內容編碼為UTF8。
總結
以上是生活随笔為你收集整理的Zint 库:Zint库的编译及使用(二维码QrCode生码),MFC/VC使用实例的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: anki填空题卡片模板
- 下一篇: chm 制作
