Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja DownloadPreviewImage pobiera dane obrazu ze skanera, wywołując metodę IWiaPreview::GetNewPreview składnika podglądu. Następnie wywołuje funkcję DetectSubregions , jeśli użytkownik aplikacji chce wywołać filtr segmentacji, który tworzy element podrzędny w obszarze pWiaItem2 dla każdego wykrytego regionu. Aby uzyskać informacje o DetectSubregions, który jest używany w tym przykładzie, zobacz metodę IWiaSegmentationFilter::DetectRegions.
W tym przykładzie użytkownik aplikacji ustawia parametr m_bUseSegmentationFilter , klikając pole wyboru. Jeśli aplikacja obsługuje tę funkcję, najpierw należy sprawdzić, czy sterownik ma filtr segmentacji, wywołując metodę IWiaItem2::CheckExtension. Aby uzyskać informacje o checkImgFilter, który jest używany w tym przykładzie, zobacz metodę IWiaPreview::GetNewPreview w dokumentacji zestawu Microsoft Windows SDK.
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);
}
// 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 a segmentation filter, however, if the driver
// comes with one (omitted here).
}
}
return hr;
}