#include "ltwrappr.h"
virtual L_INT LWia::GetPropertyBuffer(pItem, pszID, uID, pValue, puSize)
Retrieves the buffer array for any WIA property of type VT_UI1 | VT_VECTOR.
Valid pointer to a type IWiaItem or IWiaItem2 object (IWiaItem if using WIA Version 1.0 or IWiaItem2 if using WIA Version 2.0), representing the item having the property.
Retrieve this parameter by either calling the LWia::GetRootItem function to get a pointer to the device's root item, or by enumerating the child items of the device by calling LWia::EnumChildItems.
String pointer containing the equivalent property ID string for the WIA property ID (see example below):
Property ID | Property ID Equivalent String |
---|---|
WIA_IPA_TYMED | WIA_IPA_TYMED_STR or "Media Type" |
WIA_IPA_DEPTH | WIA_IPA_DEPTH_STR or "Bits Per Pixel" |
If this parameter is NULL, the WIA toolkit uses the ID passed through the uID parameter; otherwise, the pszID parameter is used regardless of whether a valid property ID through the uID parameter has been passed.
The property ID for the value being sought.
This parameter is required only if the pszID parameter is NULL; otherwise, pass 0 for this parameter.
Pointer to an allocated buffer to be updated with the value of the provided property ID.
Pointer to a variable containing the allocated buffer size.
This parameter will always be updated with the exact required buffer size.
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.
Any WIA property of type VT_UI1 | VT_VECTOR (for example,WIA_IPC_THUMBNAIL, WIA_DPS_PAD_COLOR, .etc) returns a buffer array. In order to retrieve this type of buffer, call [LWia:GetPropertyBuffer after allocating a buffer of type L_UCHAR and passing a pointer to that allocated buffer.
To retrieve the required buffer size, declare a variable of type L_SIZE_T and pass the address of that variable to this function and also pass NULL for the pValue parameter. Then use the returned buffer size to allocate your buffer with the exact required buffer size.
Required DLLs and Libraries
class CMyWIA : public LWia
{
public:
L_INT EnumWiaItemsCB(L_INT nItemsCount, L_VOID * pItem);
};
L_INT CMyWIA::EnumWiaItemsCB(L_INT nItemsCount, L_VOID * pItem)
{
UNREFERENCED_PARAMETER(nItemsCount);
L_INT nRet;
if(pItem != NULL)
{
L_SIZE_T uSize = 0;
L_UCHAR * pValue = NULL;
// Call the function the first time passing NULL for the pValue parameter so you can get
// the exact required buffer size to allocate.
nRet = GetPropertyBuffer(pItem, NULL, WIA_IPC_THUMBNAIL, NULL, &uSize);
if(nRet != WIA_SUCCESS || uSize == 0)
return nRet;
pValue = (L_UCHAR*)GlobalAllocPtr(GHND, uSize * sizeof(L_UCHAR));
if(!pValue)
return ERROR_NO_MEMORY;
nRet = GetPropertyBuffer(pItem, NULL, WIA_IPC_THUMBNAIL, pValue, &uSize);
if(nRet != WIA_SUCCESS)
return nRet;
// By now the pValue buffer should be filled with the thumbnail data that you can do
// whatever you like to with.
GlobalFreePtr(pValue);
nRet = FreeItem(pItem);
if(nRet != WIA_SUCCESS)
return nRet;
}
return WIA_SUCCESS;
}
L_INT LWIA__GetPropertyBufferExample()
{
L_INT nRet;
IWiaItem * pRootItem = NULL;
CMyWIA MyClass;
nRet = MyClass.SelectDeviceDlg(WiaDeviceTypeDefault, 0);
if(nRet != WIA_SUCCESS)
return nRet;
nRet = MyClass.GetRootItem(NULL, (L_VOID**)&pRootItem);
if(nRet != WIA_SUCCESS)
return nRet;
nRet = MyClass.EnumChildItems(pRootItem);
if(nRet != WIA_SUCCESS)
return nRet;
return SUCCESS;
}