Acquire Images Using Fast TWAIN Features
Note: The purpose of this TWAIN tutorial is to provide you a quick and easy way to generate a TWAIN program. For more in depth TWAIN programming, refer to the TWAIN demo.
To acquires images using the LEADTOOLS Fast TWAIN features:
1. |
Start a new project as follows: |
|
|
Run Microsoft Visual Studio 2005, select the File -> New -> Project menu option, and do the following: |
|
|
a. |
Select the “Other Languages” -> “Visual C++” -> “MFC”. |
|
b. |
Select MFC Application as the project type. |
|
c. |
In the Project name text box, specify tutor. |
|
d. |
In the Location text box, specify the path of the project. |
|
E |
Click the OK button, then Click Next button |
2. |
In the next dialog box, do the following: |
|
|
a. |
Select Dialog based. |
|
b. |
Ensure “Use MFC in shared DLL” is selected |
|
c. |
Click the Finish button. |
3. |
Add #include statements to your program so you can access the LEAD Twain DLL functions: |
|
|
a. |
In the Project Workspace, click the FileView tab. |
|
b. |
Double-click the tutor files folder to open it. |
|
c. |
Double-click the Header Files folder to open it. |
|
d. |
Double-click the StdAfx.h file to edit it. |
|
Add the following lines to the end of the file (keep in mind, you may have to change the path to where the dll's reside): |
#include "..\..\..\include\l_bitmap.h"
#include "..\..\..\include\lttwn.h"
4. |
Add the LEAD Twain LIB file to your program: |
|
Open “tutorDlg.cpp”, and add the following line after #include statements: |
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Lttwn_u.lib")
5. |
Add a HTWAINSESSION member to the class and set it to NULL in the constructor. |
|
|
a. |
Open “tutorDlg.h” file and add the following line after “HICON m_hIcon;” HTWAINSESSION m_hSession; |
|
b. |
Open “tutorDlg.cpp” file and add the following line inside “CtutorDlg::CtutorDlg” m_hSession = NULL; |
6. |
Go to the Solution Explorer and click the Resource Files, double click the .rc file. Double-click Dialog and double-click IDD_TUTOR_DIALOG to bring up the application's dialog box. |
|
7. |
Add 1 check box. To do this, select the check box control on the Controls toolbar. Then, click and drag to position the button on the dialog box. Then double-click the check box to change its properties. Set the properties as follows: |
|
|
ID |
Caption |
|
IDC_USEBUFFERSIZE |
Use Buffer Size |
8. |
Add two Radio buttons in addition to the above buttons. |
|
|
ID |
Caption |
|
IDC_NATIVE |
Native Mode |
|
IDC_MEMORY |
Memory Mode |
9. |
Add the following button: |
|
|
ID |
Caption |
|
IDC_ACQUIRE |
Fast Acquire |
10. |
Add the following two edit boxes and name them as follows: |
|
|
ID |
|
|
IDC_BUFFERSIZE |
|
|
IDC_FILENAME |
|
11. |
Add the following code to the end of OnInitDialog before the return statement: |
APPLICATIONDATA AppData;
AppData.uStructSize = sizeof(APPLICATIONDATA);
AppData.hWnd = GetSafeHwnd(); // Window handle of an application, may not be NULL
lstrcpy (AppData.szManufacturerName, TEXT("LEAD Technologies, Inc.")); // Application manufacturer name
lstrcpy (AppData.szAppProductFamily, TEXT("LEAD Test Applications")); // Application product family
lstrcpy (AppData.szVersionInfo, TEXT("Version 14.0")); // Application version info
lstrcpy (AppData.szAppName, TEXT("TWAIN Utility Application")); // Application Name
// initialize the twain session to use other lead twain functions
L_INT nRet = L_TwainInitSession (&m_hSession, &AppData);
if (nRet != SUCCESS)
return FALSE;
12. |
To end the Twain session and free memory allocated by the Twain DLL, add the following code in the WM_DESTROY of the CTutorDlg. Do the following: |
|
|
a. |
Double click the dialog “IDD_TUTOR_DIALOG”, and then go to View -> Properties Window, and then press “Messages” button. |
|
b. |
Select WM_DESTROY, and then add OnDestroy from the list box. |
if (m_hSession)
L_TwainEndSession (&m_hSession);
13. |
Add the following member variables for the following controls. To do so, go to Class View from Solution Explorer, select CtutorDlg, and then go to Project -> Add Variable menu, then do the following: |
|
|
a. |
Check “Control variable” check box. |
|
b. |
Select each of the following controls and add the corresponding member variable by pressing the Finish variable button. |
|
ID |
Member variable |
Type |
Category |
|
IDC_USEBUFFERSIZE |
m_bUseBufferSize |
BOOL |
Value |
|
IDC_BUFFERSIZE |
m_nBufferSize |
int |
Value |
|
IDC_FILENAME |
m_csFileName |
CString |
Value |
14. |
Double click the dialog “IDD_TUTOR_DIALOG”, and then double click on “Fast Acquire” button to add “OnBnClickedAcquire” handler function |
|
Add the following code |
void CTutorDlg:: OnBnClickedAcquire ()
{
UpdateData();
L_INT nFormat;
L_UINT uTransferMode;
BOOL bMemory = IsDlgButtonChecked(IDC_MEMORY);
if (bMemory)
{
uTransferMode = LTWAIN_BUFFER_MODE;
nFormat = FILE_CCITT_GROUP4;
}
else
{
uTransferMode = LTWAIN_NATIVE_MODE;
nFormat = FILE_TIF;
}
L_INT nRet = L_TwainAcquireMulti (m_hSession,
(L_TCHAR *)(LPCTSTR)m_csFileName,
LTWAIN_SHOW_USER_INTERFACE | LTWAIN_USE_THREAD_MODE,
uTransferMode,
nFormat,
1,
TRUE,
m_nBufferSize,
!m_bUseBufferSize
, NULL, NULL);
if (nRet == 1)
AfxMessageBox(TEXT("Fast Scanning process done successfully..."));
else
{
CString csError;
csError.Format(TEXT("AcquireMulti failed, Error = %d\n"), nRet);
AfxMessageBox(csError);
}
}
15. |
Compile and run your program to test it. |
16. |
Enter a value (say 1000) for the buffer size and a file name (include full path) for the scanned image. |