Beispiel: DownloadPreviewImage
Die DownloadPreviewImage-Funktion lädt Bilddaten aus dem Scanner herunter, indem die IWiaPreview::GetNewPreview-Methode der Vorschaukomponente aufgerufen wird. Anschließend wird die DetectSubregions-Funktion aufgerufen, wenn der Anwendungsbenutzer den Segmentierungsfilter aufrufen möchte, wodurch ein untergeordnetes Element unter pWiaItem2 für jede region erstellt wird, die er erkennt. Informationen zu DetectSubregions, das in diesem Beispiel verwendet wird, finden Sie in der IWiaSegmentationFilter::D etectRegions-Methode .
In diesem Beispiel legt der Anwendungsbenutzer den parameter m_bUseSegmentationFilter fest, indem er auf ein Kontrollkästchen klickt. Wenn die Anwendung dies unterstützt, sollte sie zunächst überprüfen, ob der Treiber über einen Segmentierungsfilter verfügt, indem IWiaItem2::CheckExtension aufgerufen wird. Informationen zu CheckImgFilter, das in diesem Beispiel verwendet wird, finden Sie in der IWiaPreview::GetNewPreview-Methode in der Microsoft Windows SDK Dokumentation.
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;
}