Метод IWiaPreview::GetNewPreview
Кэширует нефильтрованный образ, возвращенный драйвером.
Синтаксис
HRESULT GetNewPreview(
[in] IWiaItem2 *pWiaItem2,
[in] LONG lFlags,
[in] IWiaTransferCallback *pWiaTransferCallback
);
Параметры
-
pWiaItem2 [in]
-
Тип: IWiaItem2*
Указывает указатель на элемент IWiaItem2 для изображения.
-
lFlags [in]
-
Тип: LONG
В настоящее время неиспользуется. Значение должно быть равно нулю.
-
pWiaTransferCallback [in]
-
Тип: IWiaTransferCallback*
Указывает указатель на интерфейс IWiaTransferCallback вызывающего приложения.
Возвращаемое значение
Тип: HRESULT
Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Комментарии
Приложение должно вызывать IWiaPreview::GetNewPreview , прежде чем вызывать IWiaPreview::D etectRegions.
IWiaPreview::GetNewPreview задает свойство WIA_DPS_PREVIEW (и сбрасывает его перед возвратом, если оно не было задано ранее). Это позволяет драйверу и оборудованию, а также фильтру обработки изображений знать, что элемент является предварительным просмотром.
В предварительной версии компонент получения образов Windows (WIA) 2.0 создает экземпляр фильтра обработки изображений драйвера путем вызова GetExtension в pWiaItem2. Компонент предварительной версии WIA 2.0 делает это, когда приложение вызывает IWiaPreview::GetNewPreview. Компонент предварительной версии WIA 2.0 также инициализирует фильтр в IWiaPreview::GetNewPreview. Тот же экземпляр фильтра используется компонентом предварительной версии WIA 2.0 во время вызова IWiaPreview::UpdatePreview.
Перед вызовом компонента предварительной версии WIA 2.0 приложение должно вызвать CheckExtension , чтобы убедиться, что драйвер поставляется с фильтром обработки изображений. Он должен вызвать CheckExtension для элемента, который будет передаваться в IWiaPreview::GetNewPreview. Бесполезно предоставлять динамические предварительные просмотры без фильтра обработки изображений. Если приложение вызывает IWiaPreview::GetNewPreview для драйвера без фильтра обработки изображений, вызов завершится ошибкой.
Примеры
CheckImgFilter проверяет, есть ли у драйвера фильтр обработки изображений. Перед вызовом компонента предварительной версии приложение должно убедиться, что драйвер имеет фильтр обработки изображений.
HRESULT
CheckImgFilter(
IN IWiaItem2 *pWiaItem2,
OUT BOOL *pbHasImgFilter)
{
HRESULT hr = S_OK;
if (!pWiaItem2 || !pbHasImgFilter)
{
hr = E_INVALIDARG;
}
if (SUCCEEDED(hr))
{
*pbHasImgFilter = FALSE;
}
if (SUCCEEDED(hr))
{
BSTR bstrFilterString = SysAllocString(WIA_IMAGEPROC_FILTER_STR);
if (bstrFilterString)
{
hr = pWiaItem2->CheckExtension(0,
bstrFilterString,
IID_IWiaSegmentationFilter,
pbHasImgFilter);
SysFreeString(bstrFilterString);
bstrFilterString = NULL;
}
else
{
hr = E_OUTOFMEMORY;
}
}
return hr;
}
DownloadPreviewImage скачивает данные изображения из сканера, вызывая метод IWiaPreview::GetNewPreview компонента предварительного просмотра. Затем он вызывает DetectSubregions, если пользователь приложения хочет вызвать фильтр сегментации, который создает дочерний элемент в pWiaItem2 для каждого обнаруженного региона. Метод DetectSubregions, используемый в этом примере, см. в разделе DetectRegions .
В этом примере пользователь приложения настраиваетm_bUseSegmentationFilter
, щелкнув поле проверка. Если приложение поддерживает эту функцию, сначала следует проверка, что драйвер имеет фильтр сегментации, вызвав CheckExtension. Пример метода CheckImgFilter см. в разделе IWiaPreview::GetNewPreview .
HRESULT
DownloadPreviewImage(
IN IWiaItem2 *pWiaFlatbedItem2)
{
HRESULT hr = S_OK;
BOOL bHasImgFilter = FALSE;
IWiaTransferCallback *pAppWiaTransferCallback = NULL;
hr = CheckImgFilter(pWiaFlatbedItem2, &bHasImgFilter)
if (SUCCEEDED(hr))
{
if (bHasImgFilter)
{
IWiaPreview *pWiaPreview = NULL;
// In this example, the AppWiaTransferCallback class implements
// the IWiaTransferCallback interface.
// The constructor of AppWiaTransferCallback sets the reference count to 1.
pAppWiaTransferCallback = new AppWiaTransferCallback();
hr = pAppWiaTransferCallback ? S_OK : E_OUTOFMEMORY;
if (SUCCEEDED(hr))
{
// Acquire image from scanner
hr = m_pWiaPreview->GetNewPreview(pWiaFlatbedItem2,
0,
pAppWiaTransferCallback);
}
//
// Check the application UI for whether the user wants
// to use the segmentation filter indicated by the value
// of m_bUseSegmentationFilter.
//
// m_FlatbedPreviewStream is the stream that
// AppWiaTransferCallback::GetNextStream returned for the
// flatbed item.
// This stream is where the image data is stored after
// the successful return of GetNewPreview.
// The stream is passed into the segmentation filter
// for region detection.
if (SUCCEEDED(hr) && m_bUseSegmentationFilter)
{
DetectSubregions(m_FlatbedPreviewStream, pWiaFlatbedItem2);
}
if (pAppWiaTransferCallback)
{
// If the call to GetNewPreview was successful, the
// preview component calls AddRef on the callback so
// this call doesn't delete the object.
pAppWiaTransferCallback->Release();
}
}
else
{
// Do not create an instance of preview component if the driver does
// not come with an image processing filter.
// You can use segmentation filter, however, if the driver
// comes with one (omitted here).
}
}
return hr;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows Vista [только классические приложения] |
Минимальная версия сервера |
Windows Server 2008 [только классические приложения] |
Заголовок |
|
IDL |
|