Acquires one or more images from a WIA source.
#include "ltwrappr.h"
virtual L_INT LWia::AcquireSimple(uWiaVersion, uDeviceType, uFlags, pSourceItem, pAcquireOptions, pnFilesCount, pppszFilePaths)
The WIA version to be used. Possible values are:
Value | Meaning |
---|---|
WiaVersion1 | [1] Use WIA version 1. |
WiaVersion2 | [2] Use WIA version 2. |
Specifies which type of WIA device to use. Possible values are:
Value | Meaning |
---|---|
WiaDeviceTypeDefault | Generic WIA device. During device enumerations, this constant is used to enumerate all WIA devices. This is the default value. |
WiaDeviceTypeScanner | The device is a scanner. |
WiaDeviceTypeDigitalCamera | The device is a camera. Note that this type of device is not supported by Windows Vista and later. |
WiaDeviceTypeStreamingVideo | The device contains streaming video. Note that this type of device is not supported by Windows Server 2003, Windows Vista, or later. |
Flag that determines certain actions of the WIA image acquisition selection dialog box and device selection dialog. Combine values when appropriate by using a bitwise OR ( | ). Possible values are:
Value | Meaning |
---|---|
0 | Default behavior for the device image acquisition dialog box and device selection dialog. |
L_WIA_SELECT_DEVICE_NODEFAULT | [0x00000001] Force displaying the Select Device dialog box even if there is only one device available. |
L_WIA_DEVICE_DIALOG_SINGLE_IMAGE | [0x00000002] Restrict image selection to a single image in the device image acquisition dialog box. Not available if you are using WIA version 2.0. |
L_WIA_SHOW_USER_INTERFACE | [0x00000003] Show the manufacturer's image acquisition dialog box. |
L_WIA_DEVICE_DIALOG_USE_COMMON_UI | [0x00000004] Use the system user interface (UI), if available, rather than the vendor-supplied UI. If the system UI is not available, the vendor UI is used. |
Specifies the scanner's paper source (Feeder or Flatbed). Used only when acquiring from a scanner device and while the L_WIA_SHOW_USER_INTERFACE flag is NOT set.
This flag is optional if you are using WIA 1.0, because you can change the paper source by changing the WIA_DPS_DOCUMENT_HANDLING_SELECT property for the root item, or by enumerating the available scanner items and passing the item you wish to scan from.
If you are using WIA 2.0, then you have to enumerate the available scanner items and pass the item you wish to scan from. Or you can pass NULL, in which case the enumeration will be done internally and the first enumerated item will be used as the source item.
Pointer to an optional Acquire Options structure containing information for controlling the acquisition behavior from the WIA device.
Pass NULL to use the internal default values.
Pointer to a variable of type L_INT to be updated with the number of the files to be saved when acquiring using File mode.
Pointer to a string buffer to hold an array of the saved file paths. Used when the transfer mode is file.
You can define a variable of type L_TCHAR*** of size zero and pass the address of that variable to the acquire function.
It is the user's responsibility to free the received file name array.
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
This feature is available in LEADTOOLS version 16 or higher.
This is a high level acquire function that you can call directly. When using this function, the following functions are called internally:
Specify the parent window for the image acquisition dialog by calling the LScanner::SetWindow function.
Set [LWia:AcquireSimple for memory transfer or file transfer as follows:
Designate the transfer mode to be used with the LWIAPROPERTIES structure and pass it to the LWia::SetProperties method.
Call the low level LWia::SetPropertyLong, passing WIA_IPA_TYMED for the uID member of this method and the transfer mode to be used (TYMED_CALLBACK or TYMED_FILE) for the lValue member.
When performing memory transfer, override the LWia::AcquireCallBack function in order to receive the acquired page(s) through the pBitmap parameter of this callback. The callback also provides the percent completion of the page transfer progress.
When performing file transfer, overriding the LWia::AcquireCallBack function is optional: the callback only provides the saved file path and the percent completion of the file save process.
To cancel the acquire operation, override the LWia::AcquireCallBack function and return the ERROR_USER_ABORT error code.
Microsoft's image acquisition dialog box sets its own initialization properties, such as the current intent (image type), selected area (left, top, width and height), paper source, duplex mode, etc.
If the L_WIA_SHOW_USER_INTERFACE flag is set, Microsoft's image acquisition dialog box overwrites some properties set/changed by any of the LWia::SetPropertyXXX or LWia::SetProperties functions.
To prevent overwriting, do not set the L_WIA_SHOW_USER_INTERFACE flag if any LWia::SetPropertyXXX or LWia::SetProperties functions need to be called.
The Microsoft WIA Toolkit has the following, known limitation:
A Win32 version application running on Windows VISTA 64-bit that calls LWia::Acquire, specifying the pnFilesCount and pppszFilePaths parameters, fails to fill those two members with the required information.
class CMyWIA : public LWia
{
public:
L_INT AcquireSimpleCallBack(pBITMAPHANDLE pBitmap, L_TCHAR * pszFilename, L_UINT32 uPercent, L_UINT32 uFlags);
};
L_INT CMyWIA::AcquireSimpleCallBack(pBITMAPHANDLE pBitmap, L_TCHAR * pszFilename, L_UINT32 uPercent, L_UINT32 uFlags)
{
UNREFERENCED_PARAMETER(pBitmap);
UNREFERENCED_PARAMETER(pszFilename);
UNREFERENCED_PARAMETER(uPercent);
UNREFERENCED_PARAMETER(uFlags);
// You can do here any processing to the bitmap
return WIA_SUCCESS;
}
L_INT LWIA__AcquireSimpleExample(L_UINT uWiaVersion)
{
L_INT nRet;
LWIAACQUIREOPTIONS AcquireOpts;
L_UINT uFlags;
CMyWIA MyClass;
uFlags = L_WIA_SELECT_DEVICE_NODEFAULT | L_WIA_DEVICE_DIALOG_USE_COMMON_UI;
/* Initialize and fill the required fields from the LWIAACQUIREOPTIONS structure */
memset(&AcquireOpts, 0, sizeof(LWIAACQUIREOPTIONS));
AcquireOpts.uStructSize = sizeof(LWIAACQUIREOPTIONS);
AcquireOpts.bDoubleBuffer = TRUE;
AcquireOpts.uMemBufSize = 64 * 1024;
nRet = MyClass.AcquireSimple(uWiaVersion,
WiaDeviceTypeDefault,
uFlags,
&AcquireOpts,
NULL,
NULL,
NULL);
if(nRet != WIA_SUCCESS)
return nRet;
return SUCCESS;
}