编译 zint 动态库
目前 zint 库的最新版本为 2.6.2
官方源码
zint-2.6.2.src 可以从这里下载 https://sourceforge.net/projects/zint/files/zint/2.6.2/
本文介绍的源码可以在本文的末尾下载,是在官方源码的基础上,其中:
源码没有做任何修改,
在 zint-2.6.2.src 文件夹里面新增 "C++ Builder" 文件夹,这里包含:
projects\C10.2 是编译源码的项目文件,可以生成 zint.dll 和对应的 .lib 或 .a 文件
dll 生成的 .dll 文件和对应的 .lib 或 .a 在这个文件夹里面
编译动态库的项目文件是 C++ Builder 10.2 Tokyo 创建和编译的,
可以直接使用生成的 zint.dll 文件,使用生成的 zint.lib 或 zint.a 链接这个动态库。
生成二维码的例子程序
二维码不限于网址或超链接,可以随意输入一段文字,点击 “生成二维码” 按钮生成二维码,
使用 UTF-8 编码,支持多国语言,例如下面的截图。
目前标准的应用就是 UTF-8 编码的文字或超链接,可以在程序里面修改为使用其他文字编码,也可以用二进制数据生成二维码。
使用 zint.dll 生成二维码的演示程序很简单,代码如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "zint.h"
#include "UnitQRMain.h"
//---------------------------------------------------------------------------
#if defined(__clang__) && (__POINTER_WIDTH__ == 64)
# pragma link "zint.a"
#else
# pragma link "zint.lib"
#endif
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
BmpQR = new Graphics::TBitmap;
BmpQR->PixelFormat = pf24bit;
Memo1->Text = L"二维码演示程序→中文Français한국어\r\nCopyright © Victor Chen\r\nhttp://www.cppfans.com/";
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
delete BmpQR;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
UTF8String source = Memo1->Text;
zint_symbol *my_symbol = ZBarcode_Create();
my_symbol->input_mode = DATA_MODE; // UNICODE_MODE
my_symbol->symbology = BARCODE_QRCODE;
ZBarcode_Encode_and_Buffer(my_symbol, (unsigned char *)source.c_str(), source.Length(), 0);
BmpQR->Width = my_symbol->bitmap_width;
BmpQR->Height = my_symbol->bitmap_height;
int iRowBits = BmpQR->Width * 3; // 24 bits
int iRowCount = BmpQR->Height;
char *pBmpLineData = my_symbol->bitmap;
for(int row=0; row<iRowCount; row++)
{
memcpy(BmpQR->ScanLine[row], pBmpLineData, iRowBits);
pBmpLineData += iRowBits;
}
ZBarcode_Delete(my_symbol);
// BmpQR->SaveToFile(L"d:\\abcd.bmp"); // 生成的位图可以保存为 bmp 文件
PaintBox1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
int iWidth = PaintBox1->Width < PaintBox1->Height ? PaintBox1->Width : PaintBox1->Height;
int iHeight = iWidth;
int iLeft = (PaintBox1->Width - iWidth) / 2;
int iTop = (PaintBox1->Height - iHeight) / 2;
PaintBox1->Canvas->StretchDraw(TRect(iLeft,iTop,iLeft+iWidth,iTop+iHeight),BmpQR);
}
//--------------------------------------------------------------------------- |
下载例子程序和 zint 库 (源码 + 执行文件)
下载的压缩包包含的内容:
文件夹 |
描述 |
ZInt |
|
├ TestQRCode |
演示程序 |
│ ├ bin |
可执行文件 |
│ │ ├ Win32 |
32 位可执行文件 |
│ │ └ Win64 |
64 位可执行文件 |
│ ├ C10.2 |
C++ Builder 10.2 Tokyo 项目文件 |
│ ├ C2010 |
C++ Builder 2010 项目文件 |
│ └ Source |
演示程序源码 |
└ zint-2.6.2.src |
zint 源码 |
├ C++ Builder |
C++ Builder 相关的文件 |
│ ├ dll |
dll 和库文件 |
│ │ ├ Win32 |
32 位 zint.dll 和 zint.lib |
│ │ └ Win64 |
64 位 zint.dll 和 zint.a |
│ └ projects |
编译 dll 和库文件的项目文件 |
│ └ C10.2 |
C++ Builder 10.2 Tokyo 项目文件 |
├ 其他文件夹 |
官方源码,未做任何修改 |
下载:
|