IWiaPreview :: GetNewPreview, méthode

Met en cache en interne l’image non filtrée retournée par le pilote.

Syntaxe

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

Paramètres

pWiaItem2 [ dans]

Type : IWiaItem2*

Spécifie un pointeur vers l’élément IWiaItem2 pour l’image.

lFlags [ dans]

Type : long

Actuellement inutilisé. Doit être défini sur zéro (0).

pWiaTransferCallback [ dans]

Type : IWiaTransferCallback*

Spécifie un pointeur vers l’interface IWiaTransferCallback de l’application appelante.

Valeur retournée

Type : HRESULT

Si cette méthode est réussie, elle retourne la valeur _ OK. Sinon, elle retourne un code d’erreur HRESULT .

Remarques

Une application doit appeler IWiaPreview :: GetNewPreview avant d’appeler IWiaPreview ::D etectregions.

IWiaPreview :: GetNewPreview définit la propriété _ _ preview DPS WIA (et la réinitialise avant qu’elle ne soit retournée, sauf si elle a été définie auparavant). Cela permet au pilote et au matériel, ainsi qu’au filtre de traitement d’image, de savoir que l’élément est une analyse de préversion.

en interne, le composant d’aperçu de Windows l’acquisition d’images (WIA) 2,0 crée une instance du filtre de traitement d’image du pilote en appelant GetExtension sur pWiaItem2. Le composant WIA 2,0 Preview effectue cette création lorsque l’application appelle IWiaPreview :: GetNewPreview. Le composant WIA 2,0 Preview initialise également le filtre dans IWiaPreview :: GetNewPreview. La même instance de filtre est utilisée par le composant WIA 2,0 Preview lors d’un appel à IWiaPreview :: UpdatePreview.

Avant d’appeler le composant WIA 2,0 Preview, une application doit appeler CheckExtension pour s’assurer que le pilote est fourni avec un filtre de traitement d’image. Elle doit appeler CheckExtension sur l’élément qu’elle transmettra à IWiaPreview :: GetNewPreview. Il est inutile de fournir des aperçus dynamiques sans filtre de traitement d’image. Si une application appelle IWiaPreview :: GetNewPreview pour un pilote sans filtre de traitement d’image, l’appel échoue.

Exemples

CheckImgFilter vérifie si le pilote a un filtre de traitement d’image. Avant d’appeler la version préliminaire du composant, une application doit s’assurer que le pilote possède un filtre de traitement d’image.

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 télécharge les données de l’image à partir du scanneur en appelant la méthode IWiaPreview :: GetNewPreview du composant de prévisualisation. Il appelle ensuite DetectSubregions si l’utilisateur de l’application souhaite appeler le filtre de segmentation, ce qui crée un élément enfant sous pWiaItem2 pour chaque région qu’il détecte. Consultez DetectRegions pour la méthode DetectSubregions utilisée dans cet exemple.

Dans cet exemple, l’utilisateur de l’application définit m_bUseSegmentationFilter en cliquant sur une case à cocher. Si l’application prend en charge cette option, elle doit d’abord vérifier que le pilote possède un filtre de segmentation en appelant CheckExtension. Consultez IWiaPreview :: GetNewPreview pour l’exemple de méthode CheckImgFilter qui montre comment effectuer cette opération.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge
Windows [Applications de bureau Vista uniquement]
Serveur minimal pris en charge
Windows Serveur 2008 [ applications de bureau uniquement]
En-tête
WIA. h
MIDL
WIA. idl