Compartir a través de


IWiaPreview::GetNewPreview (método)

Almacena en caché internamente la imagen sin filtrar devuelta del controlador.

Sintaxis

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

Parámetros

pWiaItem2 [in]

Tipo: IWiaItem2*

Especifica un puntero al elemento IWiaItem2 de la imagen.

lFlags [in]

Tipo: LONG

Actualmente no se usa. Debe establecerse como cero.

pWiaTransferCallback [in]

Tipo: IWiaTransferCallback*

Especifica un puntero a la interfaz IWiaTransferCallback de la aplicación que llama.

Valor devuelto

Tipo: HRESULT

Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error HRESULT .

Comentarios

Una aplicación debe llamar a IWiaPreview::GetNewPreview antes de llamar a IWiaPreview::D etectRegions.

IWiaPreview::GetNewPreview establece la propiedad WIA_DPS_PREVIEW (y la restablece antes de que se devuelva, a menos que se establezca antes). Esto permite que el controlador y el hardware, así como el filtro de procesamiento de imágenes, sepan que el elemento es un examen de vista previa.

Internamente, el componente de versión preliminar 2.0 Adquisición de imágenes de Windows (WIA) crea una instancia del filtro de procesamiento de imágenes del controlador llamando a GetExtension en pWiaItem2. El componente de versión preliminar de WIA 2.0 lo hace cuando la aplicación llama a IWiaPreview::GetNewPreview. El componente de versión preliminar de WIA 2.0 también inicializa el filtro en IWiaPreview::GetNewPreview. El componente de versión preliminar de WIA 2.0 usa la misma instancia de filtro durante una llamada a IWiaPreview::UpdatePreview.

Antes de llamar al componente de versión preliminar de WIA 2.0, una aplicación debe llamar a CheckExtension para asegurarse de que el controlador incluye un filtro de procesamiento de imágenes. Debe llamar a CheckExtension en el elemento que pasaría a IWiaPreview::GetNewPreview. Es inútil proporcionar vistas previas dinámicas sin un filtro de procesamiento de imágenes. Si una aplicación llama a IWiaPreview::GetNewPreview para un controlador sin un filtro de procesamiento de imágenes, se producirá un error en la llamada.

Ejemplos

CheckImgFilter comprueba si el controlador tiene un filtro de procesamiento de imágenes. Antes de llamar al componente de vista previa, una aplicación debe asegurarse de que el controlador tiene un filtro de procesamiento de imágenes.

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 descarga datos de imagen del analizador llamando al método IWiaPreview::GetNewPreview del componente de vista previa. A continuación, llama a DetectSubregions si el usuario de la aplicación quiere invocar el filtro de segmentación, que crea un elemento secundario en pWiaItem2 para cada región que detecta. Consulte DetectRegions para el método DetectSubregions usado en este ejemplo.

En este ejemplo, el usuario de la aplicación establece m_bUseSegmentationFilter haciendo clic en una casilla. Si la aplicación lo admite, primero debe comprobar que el controlador tiene un filtro de segmentación llamando a CheckExtension. Consulte IWiaPreview::GetNewPreview para ver el ejemplo del método CheckImgFilter que muestra cómo se puede hacer esto.

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

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2008 [solo aplicaciones de escritorio]
Encabezado
Wia.h
IDL
Wia.idl