共用方式為


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::GetNewPreview ,才能呼叫 IWiaPreview::D etectRegions

IWiaPreview::GetNewPreview 會設定 WIA_DPS_PREVIEW 屬性 (,並在傳回之前重設它,除非在) 之前設定它。 這可讓驅動程式和硬體以及影像處理篩選器知道專案是預覽掃描。

在內部,Windows 映像擷取 (WIA) 2.0 預覽元件會呼叫pWiaItem2上的GetExtension來建立驅動程式影像處理篩選的實例。 當應用程式呼叫 IWiaPreview::GetNewPreview時,WIA 2.0 預覽元件會執行此動作。 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 [僅限傳統型應用程式]
標頭
Wia.h
Idl
Wia.idl