IWiaPreview::GetNewPreview メソッド

ドライバーから返されたフィルター処理されていないイメージを内部的にキャッシュします。

構文

HRESULT GetNewPreview(
  [in] IWiaItem2            *pWiaItem2,
  [in] LONG                 lFlags,
  [in] IWiaTransferCallback *pWiaTransferCallback
);

パラメーター

pWiaItem2 [in]

種類: IWiaItem2*

イメージの IWiaItem2 項目へのポインターを指定します。

lFlags [in]

型: LONG

現在使用されていません。 ゼロに設定してください。

pWiaTransferCallback [in]

種類: IWiaTransferCallback*

呼び出し元のアプリケーションの IWiaTransferCallback インターフェイスへのポインターを指定します。

戻り値

型: HRESULT

このメソッドが成功すると、 S_OKが返されます。 それ以外の場合は、 HRESULT エラー コードが返されます。

注釈

アプリケーションは 、IWiaPreview: :D etectRegions を呼び出す前に IWiaPreview::GetNewPreview を呼び出す必要があります。

IWiaPreview::GetNewPreview、WIA_DPS_PREVIEW プロパティを設定します (前に設定されていない限り、戻る前にリセットします)。 これにより、ドライバーとハードウェア、および画像処理フィルターは、アイテムがプレビュー スキャンであることを認識できます。

内部的には、Windows イメージ取得 (WIA) 2.0 プレビュー コンポーネントは、pWiaItem2GetExtension を呼び出すことによって、ドライバーの画像処理フィルターのインスタンスを作成します。 WIA 2.0 プレビュー コンポーネントは、アプリケーションが IWiaPreview::GetNewPreview を呼び出すときにこれを行います。 WIA 2.0 プレビュー コンポーネントでは、 IWiaPreview::GetNewPreview でフィルターも初期化されます。 同じフィルター インスタンスは、 IWiaPreview::UpdatePreview の呼び出し中に WIA 2.0 プレビュー コンポーネントによって使用されます。

WIA 2.0 プレビュー コンポーネントを呼び出す前に、アプリケーションで CheckExtension を呼び出して、ドライバーに画像処理フィルターが付属していることを確認する必要があります。 IWiaPreview::GetNewPreview に渡されるアイテムに対して CheckExtension を呼び出す必要があります。 画像処理フィルターなしでライブ プレビューを提供することは役に立ちません。 アプリケーションが画像処理フィルターのないドライバーに対 して IWiaPreview::GetNewPreview を呼び出すと、呼び出しは失敗します。

CheckImgFilter は、ドライバーに画像処理フィルターがあるかどうかを確認します。 プレビュー コンポーネントを呼び出す前に、アプリケーションでドライバーに画像処理フィルターがあることを確認する必要があります。

HRESULT
CheckImgFilter(
   IN  IWiaItem2 *pWiaItem2,
   OUT BOOL      *pbHasImgFilter)
{
   HRESULT     hr = S_OK;

   if (!pWiaItem2 || !pbHasImgFilter)
   {
      hr = E_INVALIDARG;
   }

   if (SUCCEEDED(hr))
   {
     *pbHasImgFilter = FALSE;
   }

   if (SUCCEEDED(hr))
   {
      BSTR    bstrFilterString = SysAllocString(WIA_IMAGEPROC_FILTER_STR);

      if (bstrFilterString)
      {
         hr = pWiaItem2->CheckExtension(0,
                                        bstrFilterString,
                                        IID_IWiaSegmentationFilter,
                                        pbHasImgFilter);

         SysFreeString(bstrFilterString);
         bstrFilterString = NULL;
      }
      else
      {
         hr = E_OUTOFMEMORY;
      }
   }

   return hr;

}

DownloadPreviewImage は、プレビュー コンポーネントの IWiaPreview::GetNewPreview メソッドを呼び出して、スキャナーからイメージ データをダウンロードします。 その後、アプリケーション ユーザーがセグメント化フィルターを呼び出す場合は DetectSubregions を呼び出します。これにより、検出されたリージョンごとに pWiaItem2 の下に子項目が作成されます。 この例で使用 する DetectSubregions メソッドについては、「DetectRegions」を参照してください。

この例では、アプリケーション ユーザーが チェック ボックスをクリックして設定m_bUseSegmentationFilterします。 アプリケーションでこれをサポートしている場合は、まず、ドライバーが CheckExtension を呼び出してセグメント化フィルターを持っていることをチェックする必要があります。 これを行う方法を示す CheckImgFilter メソッドの例については、「 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);    
         }

         //
         // Check the application UI for whether the user wants
         // to use the segmentation filter indicated by the value 
         // of m_bUseSegmentationFilter.
         //
         // 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 segmentation filter, however, if the driver
         // comes with one (omitted here).
      }
   }

   return hr;
}

要件

要件
サポートされている最小のクライアント
Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server 2008 [デスクトップ アプリのみ]
Header
Wia.h
IDL
Wia.idl