次の方法で共有


例: 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;
}