本教程展示如何使用LEADTOOLS SDK从Windows C DLL应用程序中的TWAIN源获取映像。
概述 | |
---|---|
总结 | 本教程介绍如何从Windows C DLL应用程序中的TWAIN源获取映像。 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(19kb) |
平台 | Windows C DLL应用程序 |
IDE | Visual Studio 2017, 2019 |
开发许可 | 下载LEADTOOLS |
用另一种语言试试 |
|
章节,熟悉创建项目和加载/显示图像的基本步骤添加引用和设置License而且加载、显示和保存图像教程,在工作之前从TWAIN源- Windows C DLL获取映像教程。
中创建的项目的副本开始加载、显示和保存图像教程。如果项目不可用,请按照该教程中的步骤创建它。
要使用LEADTOOLS实现TWAIN扫描,需要添加所需的头文件和库文件。打开预编译的头文件(或pch.h
或stdafx.h
,取决于所使用的Visual Studio版本),并添加以下行:
# include“C: \ LEADTOOLS22 \ \ Lttwn.h包括”
#pragma comment (lib,“C: \ \ LEADTOOLS22 \ \ Lib \ \ CDLL \ \ x64 \ \ Lttwn_x.lib”)// TWAIN支持
请注意
有关应用程序所需的dll的完整列表,请参阅包含在应用程序中的文件- C API。
许可证解锁项目所需的特性。它必须在调用任何工具箱功能之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License。
有两种类型的运行时许可证:
请注意
中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。
随着项目的创建、引用的添加、许可证的设置和加载图像代码的添加,编码就可以开始了。
使用解决方案资源管理器,导航到项目的主CPP文件,并在BITMAPHANDLE
最上面的声明:
HTWAINSESSION twainSession = NULL;
中添加一个新案例开关(消息)
声明指向()
函数命名WM_CREATE
。将下面的代码添加到新案例中来初始化TWAIN会话:
情况下WM_CREATE:
如果(! L_IsTwainAvailable (hWnd))
{
对话框(hWnd,文本("无法初始化Twain功能。\nTwain不可用”),文本(“马克·吐温教程”), MB_ICONERROR);
}
其他的
{
appData = {运算符(应用数据),hWnd, TEXT(“我的公司”),文本(“我的产品”),文本(“1.0”),文本(“我的应用”), twlg_english_usa, twcy_usa};
L_TwainInitSession (&twainSession appdata);
}
打破;
修改处理的案例WM_DESTROY
,在指向()
函数,在程序结束时终止TWAIN会话。
情况下WM_DESTROY:
如果(twainSession)
{
L_TwainEndSession (&twainSession);
twainSession = NULL;
}
//保持case中其余代码不变
在解决方案资源管理器双击资源文件(.rc)打开资源视图。然后双击资源树中的菜单。
添加一个新的吐温菜单旁边的下拉菜单文件菜单。将下表中的两个菜单项添加到新增的菜单项中吐温菜单。
菜单项文本 | 项ID |
---|---|
选择源 | ID_TWAIN_SELECTSOURCE |
与获得 | ID_TWAIN_ACQUIRE |
导航回指向
函数,和下开关(wmId)
语句的下面WM_COMMAND
Case,添加下面两个新的Case。
开关(wmId)
{
情况下ID_TWAIN_SELECTSOURCE:
L_TwainSelectSource (twainSession, NULL);
打破;
情况下ID_TWAIN_ACQUIRE:
如果(TwainScan(hWnd) == SUCCESS)
InvalidateRect(hWnd, NULL, TRUE);
其他的
对话框(hWnd,文本(没有从吐温源头扫描。要么用户取消了,要么发生了错误。”),文本(“马克·吐温教程”), MB_ICONERROR);
打破;
//保留其余的代码
添加一个新的TwainScan
函数,它可以放在指向
函数,并添加下面的代码。
L_INT TwainScan(HWND)
{
BITMAPHANDLE bmp = {0};
L_INT nRet = L_TwainAcquire(twainSession, &bmp,运算符(bmp), NULL, LTWAIN_SHOW_USER_INTERFACE, NULL, NULL);
如果(nRet != SUCCESS)
返回nRet;
如果(LEADBmp.Flags.Allocated)
L_FreeBitmap (&LEADBmp);
L_CopyBitmapHandle (&LEADBmp, bmp,运算符BITMAPHANDLE);//数据现在属于全局位图
返回成功;
}
打开资源视图双击资源树中的菜单。
添加一个新的选项菜单旁边的下拉菜单吐温菜单。将下表中的三个菜单项添加到新增的菜单项中选项菜单。
菜单项文本 | 项ID |
---|---|
本机 | ID_OPTIONS_NATIVE |
与记忆 | ID_OPTIONS_MEMORY |
文件 | ID_OPTIONS_FILE |
去指向
函数,和下开关(wmId)
语句的下面WM_COMMAND
Case,为新菜单项添加下面的新用例。
开关(wmId)
{
情况下ID_OPTIONS_NATIVE:
SetTransferMech (hWnd, TWSX_NATIVE);
打破;
情况下ID_OPTIONS_MEMORY:
SetTransferMech (hWnd, TWSX_MEMORY);
打破;
情况下ID_OPTIONS_FILE:
SetTransferMech (hWnd, TWSX_FILE);
打破;
//保留其余的代码
添加一个新的SetTransferMode
功能,放在上面指向
函数。属性的值来设置TWAIN能力图像传输机制能力。
无效SetTransferMech(HWND HWND, L_UINT transferMech)
{
//命令Twain源更改传输模式
TW_CAPABILITY twSetCap;
twSetCap。Cap = ICAP_XFERMECH;
twSetCap。ConType = TWON_ONEVALUE;
L_TwainStartCapsNeg (twainSession);
L_TwainCreateNumericContainerOneValue(&twSetCap, TWAINNUMERICTYPE_TW_UINT16, transferMech);
ltwainsetcapability (twainSession, &twSetCap, ltwain_capacity_set);
L_TwainFreeContainer (&twSetCap);
L_TwainEndCapsNeg (twainSession);
CheckOptionsMenu (hWnd);
}
添加一个新的CheckOptionsMenu
函数在SetTransferMode
函数。方法的值,此新函数显示如何检索图像传输机制TWAIN功能,并在相应的菜单项旁边添加一个复选标记。
无效CheckOptionsMenu (HWND HWND)
{
//询问Twain来源当前传输模式
TW_CAPABILITY twGetCap = {0};
twGetCap。Cap = ICAP_XFERMECH;
twGetCap。ConType = TWON_ONEVALUE;
L_TwainStartCapsNeg (twainSession);
L_TwainGetCapability(twainSession, &twGetCap, ltwain_capacity_getcurrent);
L_UINT transferMech = -1;
L_TwainGetNumericContainerUINTValue(&twGetCap, 0, &transferMech);
L_TwainEndCapsNeg (twainSession);
UINT项目= 0;
开关(transferMech)
{
情况下TWSX_NATIVE:
item = ID_OPTIONS_NATIVE;
打破;
情况下TWSX_MEMORY:
item = ID_OPTIONS_MEMORY;
打破;
情况下TWSX_FILE:
item = ID_OPTIONS_FILE;
}
HMENU菜单= GetMenu(hWnd);
CheckMenuItem(菜单,ID_OPTIONS_NATIVE, MF_UNCHECKED);
CheckMenuItem(菜单,ID_OPTIONS_MEMORY, MF_UNCHECKED);
CheckMenuItem(菜单,ID_OPTIONS_FILE, MF_UNCHECKED);
CheckMenuItem(菜单,项目,MF_CHECKED);
}
按下运行项目F5,或选择Debug ->开始调试。
如果正确地执行了这些步骤,应用程序将运行。测试时,请遵循以下说明:
请注意
确保扫描仪所需的TWAIN驱动程序安装在机器上,机器通常与扫描设备一起安装。
本教程展示了如何列出可用的TWAIN设备,并从这些设备获取扫描图像。它还涵盖了如何使用TwainSession
而且TwainCapability
类。