VC利用 zint 库生成二维码

1. zint库,可以先下载源码,编译出来。编译过程需要用到 libpng库。

2. 使用起来比较简单,导入头和库文件即可。

3. 在生成QR二维码时,手册上没有描述具体信息。下面给出一段生成二维码的代码。


  1. BOOL CSystemInfo::GenerateBarcode(const char *szText,int len,const char *szOutPath)  
  2. {  
  3.     struct zint_symbol *symbol;  
  4.     int ret = 0;  
  5.   
  6.     if (!szText)  
  7.     {  
  8.         DbgPrint((”GenerateBarCode invalid parameter”));  
  9.         return FALSE;  
  10.     }  
  11.   
  12.     TRY  
  13.     {  
  14.         symbol = ZBarcode_Create();  
  15.         if (symbol != NULL)  
  16.         {  
  17.             symbol->scale = 4;  
  18.             symbol->option_1 = 1; //容错级别  
  19.             symbol->option_2 = 1; //版本,决定图片大小  
  20.             symbol->symbology = BARCODE_QRCODE;  
  21.             symbol->output_options = 0;  
  22.             symbol->show_hrt = 0; //可显示信息,如果设置为1,则需要设置text值  
  23.             symbol->input_mode = UNICODE_MODE;  
  24.             if (szOutPath)  
  25.                 memcpy(symbol->outfile,szOutPath,sizeof(symbol->outfile) - 1); //输出文件名  
  26.           
  27.             ret = ZBarcode_Encode(symbol,(unsigned char *)szText,len); //编码  
  28.             if (ret != 0)  
  29.             {  
  30.                 DbgPrint((”ZBarcode_Encode err: %s”,symbol->errtxt));  
  31.                 ZBarcode_Delete(symbol);  
  32.                 return FALSE;  
  33.             }  
  34.             ret = ZBarcode_Print(symbol,0); //antate angle 旋转角度  
  35.             if (ret > WARN_INVALID_OPTION)  
  36.             {  
  37.                 DbgPrint((”ZBarcode_Print ret: %d,err: %s”,ret,symbol->errtxt));  
  38.             }  
  39.             ZBarcode_Delete(symbol);  
  40.             return TRUE;  
  41.         }else  
  42.         {  
  43.             DbgPrint((”ZBarcode_Create err: %s”,symbol->errtxt));  
  44.             return FALSE;  
  45.         }  
  46.     }CATCH(CException,e)  
  47.     {  
  48.         char szErr[256] = {0};  
  49.         e->GetErrorMessage(szErr,255);  
  50.         DbgPrint((”GenerateBarcode exception: %s”,szErr));  
  51.         return FALSE;  
  52.     }END_CATCH  
  53. }  
BOOL CSystemInfo::GenerateBarcode(const char *szText,int len,const char *szOutPath)
{
    struct zint_symbol *symbol;
    int ret = 0;

    if (!szText)
    {
        DbgPrint(("GenerateBarCode invalid parameter"));
        return FALSE;
    }

    TRY
    {
        symbol = ZBarcode_Create();
        if (symbol != NULL)
        {
            symbol->scale = 4;
            symbol->option_1 = 1; //容错级别
            symbol->option_2 = 1; //版本,决定图片大小
            symbol->symbology = BARCODE_QRCODE;
            symbol->output_options = 0;
            symbol->show_hrt = 0; //可显示信息,如果设置为1,则需要设置text值
            symbol->input_mode = UNICODE_MODE;
            if (szOutPath)
                memcpy(symbol->outfile,szOutPath,sizeof(symbol->outfile) - 1); //输出文件名

            ret = ZBarcode_Encode(symbol,(unsigned char *)szText,len); //编码
            if (ret != 0)
            {
                DbgPrint(("ZBarcode_Encode err: %s",symbol->errtxt));
                ZBarcode_Delete(symbol);
                return FALSE;
            }
            ret = ZBarcode_Print(symbol,0); //antate angle 旋转角度
            if (ret > WARN_INVALID_OPTION)
            {
                DbgPrint(("ZBarcode_Print ret: %d,err: %s",ret,symbol->errtxt));
            }
            ZBarcode_Delete(symbol);
            return TRUE;
        }else
        {
            DbgPrint(("ZBarcode_Create err: %s",symbol->errtxt));
            return FALSE;
        }
    }CATCH(CException,e)
    {
        char szErr[256] = {0};
        e->GetErrorMessage(szErr,255);
        DbgPrint(("GenerateBarcode exception: %s",szErr));
        return FALSE;
    }END_CATCH
}

注:

二维码的设置需要如下几个参数:

scale  放大倍数

option_1 依赖于symbology,不同编码有不同意义

option_2 依赖于symbology,不同编码有不同意义

symbology  编码类型,在手册上有描述,如二维码是58

output_options 有无边框之类的控制

show_hrt 在图片上显示可读信息,如果设置为1,则text必须含有内容。

text 图片上显示的文字信息,配合show_hrt使用。

input_mode 决定编码格式,二进制流,还是ASCII,亦或是UTF8。


源码:http://download.csdn.net/detail/liuyu60305002/6835395



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值