Esempio: DownloadPreviewImage
La funzione DownloadPreviewImage scarica i dati dell'immagine dallo scanner chiamando il metodo IWiaPreview::GetNewPreview del componente di anteprima. Chiama quindi la funzione DetectSubregions se l'utente dell'applicazione vuole richiamare il filtro di segmentazione, che crea un elemento figlio in pWiaItem2 per ogni area rilevata. Per informazioni su DetectSubregions, usato in questo esempio, vedere il metodo IWiaSegmentationFilter::D etectRegions .
In questo esempio l'utente dell'applicazione imposta il parametro m_bUseSegmentationFilter facendo clic su una casella di controllo. Se l'applicazione supporta questa operazione, deve prima verificare che il driver disponga di un filtro di segmentazione chiamando IWiaItem2::CheckExtension. Per informazioni su CheckImgFilter, usato in questo esempio, vedere il metodo IWiaPreview::GetNewPreview nella documentazione di 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;
}