C++ Builder 生成二维码

使用 zint 库生成二维码。
可以使用我的上一篇文章 《C++ Builder 编译 zint 库》生成的 zint.dll。

  • 把头文件和库文件拷贝到项目文件夹里面
  • 测试程序的窗口设计
  • 程序代码
  • 运行程序
  • 下载本文例子源码

1. 把头文件和库文件拷贝到项目文件夹里面

把 zint.h 和生成的 zint.lib 和 zint.a 这 3 个文件放在项目文件夹里面。

把 zint.h、zint.lib 和 zint.a 这 3 个文件放在项目文件夹里面

2. 测试程序的窗口设计

窗口上的控件包括:

  • Image1: TImage 控件,用于显示二维码;
  • Memo1: TMemo 控件,用于输入文字内容;
  • RadioButtonD、RadioButtonL、RadioButtonM、RadioButtonQ、RadioButtonH:TRadioButton 控件,用于选择容错率;
  • Button1:TButton 控件,点击这个按钮生成二维码。
二维码测试程序窗口设计

3. 程序代码

程序需要包含的头文件:

#include <memory>
#include "zint.h"

程序需要链接的库文件,64 位使用 zint.a,32 位使用 zint.lib:

#if defined(__clang__) && (__POINTER_WIDTH__ == 64)
    #pragma link "zint.a"
#else
    #pragma link "zint.lib"
#endif

点击 Button1 按钮生成二维码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    UTF8String sText = Memo1->Text; // 使用 UTF-8 编码
    std::auto_ptr<Graphics::TBitmap>BmpQR(new Graphics::TBitmap); // 存放生成二维码的 bmp 图片
    int iECCLevel = -1; // 容错率: -1:默认, 1:L, 2:M, 3:Q, 4:H

         if(RadioButtonL->Checked)iECCLevel = 1; // 1: L
    else if(RadioButtonM->Checked)iECCLevel = 2; // 2: M
    else if(RadioButtonQ->Checked)iECCLevel = 3; // 3: Q
    else if(RadioButtonH->Checked)iECCLevel = 4; // 4: H

    zint_symbol *pMySymbol = ZBarcode_Create();
    pMySymbol->input_mode = DATA_MODE;
    pMySymbol->symbology = BARCODE_QRCODE;
    pMySymbol->option_1 = iECCLevel;

    ZBarcode_Encode_and_Buffer(pMySymbol, (unsigned char *)sText.c_str(), sText.Length(), 0);

    BmpQR->PixelFormat = pf24bit;
    BmpQR->Width = pMySymbol->bitmap_width;
    BmpQR->Height = pMySymbol->bitmap_height;
    int iRowBits = BmpQR->Width * 3; // 24 bits
    int iRowCount = BmpQR->Height;
    char *pBmpLineData = pMySymbol->bitmap;
    for(int row=0; row<iRowCount; row++)
    {
        memcpy(BmpQR->ScanLine[row], pBmpLineData, iRowBits);
        pBmpLineData += iRowBits;
    }

    ZBarcode_Delete(pMySymbol);

    TRect rImage(0, 0, Image1->Width, Image1->Height);
    Image1->Canvas->StretchDraw(rImage, BmpQR.get());
}

程序截图,头文件、库文件和事件代码的位置:

程序截图,头文件、库文件和事件代码的位置

4. 运行程序

需要把 32 位和 64 位的 zint.dll 复制到对应的 exe 文件相同的文件夹里面。

运行结果:

运行结果:选择容错率 M 生成的二维码

用手机 QQ 扫描生成的二维码:

用手机 QQ 扫描的结果

5. 下载本文例子源码


相关链接:

推荐阅读更多精彩内容

  • 在做项目的时候,如果有朋友做城市列表或者通讯录列表的时候。产品都会给出页面右侧的索引功能的,我这次做项目时就遇到了...
    等不来的期待阅读 182评论 0 0
  • 男人总是比女人威严的多,你知道。而且,当你是指盯着圣克莱尔的眼睛时,真是令人奇怪,那眼睛会闪烁着一种凌厉的光芒,那...
    心悦or怡婷阅读 19评论 0 0
  • 当自律成为一种习惯,真的是习惯。这小半个月,每天晚上十一点写三百遍名字,其实有很多次,正在看小说,正在精彩部分,但...
    莫谩瑞阅读 34评论 0 0
  • 上个月(2018年7月16日)是母亲去世的第五十四个月,2018年的暑假即将过去,这一年来我忽然对于时间的流逝感到...
    思想聚焦的原创阅读 157评论 2 2
  • 我最爱的美术课到了,我拿出一张洁白的A5肯特纸,让摄像头对准它,铺开笔帘,48支穿着彩衣的笔骑士整装待发,...
    白羊姐姐阅读 10评论 0 0