Поделиться через


Метод 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 создает экземпляр фильтра обработки изображений драйвера путем вызова GetExtension в pWiaItem2. Компонент предварительной версии WIA 2.0 делает это, когда приложение вызывает IWiaPreview::GetNewPreview. Компонент предварительной версии WIA 2.0 также инициализирует фильтр в IWiaPreview::GetNewPreview. Тот же экземпляр фильтра используется компонентом предварительной версии WIA 2.0 во время вызова IWiaPreview::UpdatePreview.

Перед вызовом компонента предварительной версии WIA 2.0 приложение должно вызвать CheckExtension , чтобы убедиться, что драйвер поставляется с фильтром обработки изображений. Он должен вызвать CheckExtension для элемента, который будет передаваться в IWiaPreview::GetNewPreview. Бесполезно предоставлять динамические предварительные просмотры без фильтра обработки изображений. Если приложение вызывает 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