例: DownloadPreviewImage
DownloadPreviewImage 関数は、プレビュー コンポーネントの IWiaPreview::GetNewPreview メソッドを呼び出し、スキャナーからイメージ データをダウンロードします。 その後、アプリケーション ユーザーがセグメント化フィルターを呼び出す場合は DetectSubregions 関数を呼び出します。これにより、検出されたリージョンごとに pWiaItem2 の下に子項目が作成されます。 この例で使用している DetectSubregions の詳細は、IWiaSegmentationFilter::DetectRegions メソッドを参照してください。
この例では、アプリケーション ユーザーが チェック ボックスをクリックして、m_bUseSegmentationFilter パラメーターを設定します。 アプリケーションでこれに対応している場合、まずドライバーが IWiaItem2::CheckExtension を呼び出してセグメンテーション フィルターがあることをチェックします。 この例で使用する CheckImgFilter の詳細は、Microsoft Windows SDK ドキュメントの 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);
}
// 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;
}