本教程展示如何在Windows C/ c++ API应用程序中使用LEADTOOLS SDK从遵循AAMVA规范的PDF417条形码中提取信息。
概述 | |
---|---|
总结 | 本教程介绍如何在Windows C DLL应用程序中从遵循AAMVA规范的PDF417中执行数据提取。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(19kb) |
平台 | Windows C DLL应用程序 |
IDE | Visual Studio 2017, 2019 |
开发许可 | 下载LEADTOOLS |
用另一种语言试试 |
|
在开始之前提取驾照AAMVA条码- Windows C DLL教程,熟悉创建项目和加载/显示图像的基本步骤添加引用和设置License和加载,显示和保存图像教程。
中创建的64位Windows API项目的副本加载,显示和保存图像教程。如果项目不可用,请按照该教程中的步骤创建它。
要使用LEADTOOLS读取条形码并提取AAMVA数据,请添加所需的头文件和DLL文件。打开预编译的头文件(或pch.h
或stdafx.h
,取决于所使用的Visual Studio版本),并添加以下行:
# include“C: \ LEADTOOLS22 \ \ Ltbar.h包括”
#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Ltbar_x.lib”)//条形码和AAMVA支持
请注意
有关特定工具箱功能或文件格式所需dll的完整列表,请参阅你的申请中包含的文件.
有关所需的Barcode dll的详细信息,请参阅帮助主题应用程序中包含的条形码文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱功能之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。
创建项目、添加引用、设置许可证以及添加加载和显示图像代码之后,就可以开始编码了。
以下步骤适用于Visual Studio 2019;对于Visual Studio的其他版本,它们可能有所不同。
去解决方案资源管理器双击资源文件(.rc)。
添加一个新的条形码菜单旁边的下拉菜单文件菜单。在新增的条形码菜单,添加&提取PDF417数据菜单项。新项目的ID应该是ID_BARCODE_EXTRACTPDF417DATA
.
去指向
函数和开关(wmId)
语句的下面WM_COMMAND
Case,添加一个新的Case:
开关(wmId)
{
情况下ID_BARCODE_EXTRACTPDF417DATA:
如果(LEADBmp.Flags.Allocated)
ExtractPDF417Data (hWnd);
其他的
对话框(hWnd,文本("无法搜索AAMVA数据。未加载图像”),文本(“条形码演示”), MB_ICONERROR);
打破;
//保留其余的代码
添加一个新的ExtractPDF417Data
函数。你可以把这个函数放在指向
函数,并添加以下代码:
无效ExtractPDF417Data (HWND HWND)
{
如果(L_BarCodeInit(BARCODES_PDF_READ) != SUCCESS)
返回;
pBARCODEDATA pBarCodes = NULL;
barcodeereadpdf BarPdf = {0};
BarPdf。uStructSize =运算符BARCODEREADPDF;
BarPdf。nDirection = BARCODE_DIR_HORIZONTAL;
BARCODECOLOR BarColor = {0};
BarColor。uStructSize =运算符BARCODECOLOR;
BarColor。dwColorBar = RGB(0,0,0);
BarColor。dwColorSpace = RGB(255, 255, 255);
//在整个位图中搜索PDF417条形码
L_INT nRet = L_BarCodeRead(&LEADBmp, NULL, BARCODE_PDF417, BARCODE_SCANLINES_PER_PIXELS, BARCODE_BLOCK_SEARCH, 0, NULL, &BarPdf, &BarColor, &pBarCodes,运算符BARCODEDATA);
如果(SUCCESS == nRet)
{
如果(ParseAAMVAData(hwnd, pBarCodes) != SUCCESS)
对话框(hwnd,文本("ParseAAMVAData返回错误"),文本(“条形码演示”), MB_ICONERROR);
}
其他的
对话框(hwnd,文本("无法读取PDF 417条形码"),文本(“条形码演示”), MB_ICONERROR);
如果(pBarCodes)
L_BarCodeFree (&pBarCodes);
L_BarCodeExit ();
}
添加一个新的ParseAAMVAData
从内部调用的函数ExtractPDF417Data ()
.添加下面的代码来解析PDF417条形码中的AAMVA数据:
L_INT parseaamvdata (HWND HWND, pBARCODEDATA pBARCODEDATA)
{
如果(pBarCodeData !)
返回失败;
AAMVAID id = {0};
//解析条形码AAMVA数据
L_INT nRet = L_BarCodeParseAAMVAData(pBarCodeData->pszBarCodeData, pBarCodeData->nSizeofBarCodeData, &id, L_FALSE);
如果(nRet != SUCCESS)
返回nRet;
L_CHAR szResultString[1024] =“发行人识别号码:”;
strcat_s (szResultString id.IssuerIdentificationNumber);
/ /名字
L_BOOL bInferredFromFullName;
L_CHAR* pszFirstName = NULL;
nRet = L_BarCodeAAMVAIDFirstName(&id, &pszFirstName, &bInferredFromFullName);
如果(nRet != SUCCESS)
返回nRet;
strcat_s (szResultString"\nFirst Name: ");
strcat_s (szResultString pszFirstName);
//必须释放结果
L_BarCodeAAMVAMemoryFree (pszFirstName);
/ /姓名
L_CHAR* pszLastName = NULL;
nRet = L_BarCodeAAMVAIDLastName(&id, &pszLastName, &bInferredFromFullName);
如果(nRet != SUCCESS)
返回nRet;
strcat_s (szResultString"\nLast Name: ");
strcat_s (szResultString pszLastName);
//必须释放结果
L_BarCodeAAMVAMemoryFree (pszLastName);
L_BOOL想;
//检查我们是否可以确定ID持有人是否超过21
nRet = L_BarCodeAAMVAIDOver21Available(&id, &bRes);
如果(nRet != SUCCESS)
返回nRet;
strcat_s (szResultString“21 \也不要吗?:“);
如果(想)
{
//Over21可用。让我们检查ID hold是否为21+
L_CHAR* pszCurrentDate = GetCurrentDate();
nRet = L_BarCodeAAMVAIDOver21(&id, pszCurrentDate, &bRes);
如果(nRet != SUCCESS)
返回nRet;
如果(想)
strcat_s (szResultString“真正的”);
其他的
strcat_s (szResultString“假”);
}
其他的//Over21不可用。
strcat_s (szResultString“不可用”);
szResultString MessageBoxA (hwnd,“AAMVA数据”, MB_OK);
//释放AAMVAID结构
nRet = L_BarCodeFreeAAMVAID(&id);
返回nRet;
}
添加一个名为GetCurrentDate
.返回日期的任何函数名称Format可以代替它。
# include < time.h >
L_CHAR * GetCurrentDate ()
{
静态字符currentDate [9];
time_t t = time(NULL);
结构体Tm local_t = {0};
localtime_s (&local_t科技);
wsprintfA (currentDate2.2 2.2 4.4“% d % d % d”, local_t。Tm_year + 1900, local_t。Tm_mon + 1, local_t.tm_mday);
返回currentDate;
}
请注意
还有更多
AAMVAID
工具箱中的功能;上面的代码片段展示了一些常用的值。
按下运行项目F5,或选择调试->开始调试.
如果正确地执行了这些步骤,应用程序将运行并允许用户进行选择文件->开放加载包含条形码数据的图像。选择条形码->提取PDF417数据,使应用程序运行条形码识别并解析AAMVA数据并将其显示在消息框中。
请注意
如果没有可用于测试的带有驾照条形码的图像,则可以使用此文件路径下的图像:
C: \ LEADTOOLS22 \ \ \ license_sample_rear_aamva.png图像资源
方法的使用AAMVAID函数。