Compartilhar via


Método IWiaPreview::GetNewPreview

Armazena em cache internamente a imagem não filtrada retornada do driver.

Sintaxe

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

Parâmetros

pWiaItem2 [in]

Tipo: IWiaItem2*

Especifica um ponteiro para o item IWiaItem2 para a imagem.

lFlags [in]

Tipo: LONG

Atualmente não utilizado. Deve ser definido como zero.

pWiaTransferCallback [in]

Tipo: IWiaTransferCallback*

Especifica um ponteiro para a interface IWiaTransferCallback do aplicativo de chamada.

Valor retornado

Tipo: HRESULT

Se esse método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT .

Comentários

Um aplicativo deve chamar IWiaPreview::GetNewPreview antes de chamar IWiaPreview::D etectRegions.

IWiaPreview::GetNewPreview define a propriedade WIA_DPS_PREVIEW (e a redefine antes de retornar, a menos que tenha sido definida antes). Isso permite que o driver e o hardware, bem como o filtro de processamento de imagem, saibam que o item é uma verificação de visualização.

Internamente, o componente de versão prévia wia (aquisição de imagens do Windows) 2.0 cria uma instância do filtro de processamento de imagem do driver chamando GetExtension no pWiaItem2. O componente de versão prévia do WIA 2.0 faz isso quando o aplicativo chama IWiaPreview::GetNewPreview. O componente de versão prévia do WIA 2.0 também inicializa o filtro em IWiaPreview::GetNewPreview. A mesma instância de filtro é usada pelo componente de versão prévia do WIA 2.0 durante uma chamada para IWiaPreview::UpdatePreview.

Antes de chamar o componente de versão prévia do WIA 2.0, um aplicativo deve chamar CheckExtension para garantir que o driver venha com um filtro de processamento de imagem. Ele deve chamar CheckExtension no item que ele passaria para IWiaPreview::GetNewPreview. É inútil fornecer visualizações ao vivo sem um filtro de processamento de imagem. Se um aplicativo chamar IWiaPreview::GetNewPreview para um driver sem um filtro de processamento de imagem, a chamada falhará.

Exemplos

CheckImgFilter verifica se o driver tem um filtro de processamento de imagem. Antes de chamar o componente de visualização, um aplicativo deve garantir que o driver tenha um filtro de processamento de imagem.

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 baixa dados de imagem do verificador chamando o método IWiaPreview::GetNewPreview do componente de visualização. Em seguida, ele chama DetectSubregions se o usuário do aplicativo quiser invocar o filtro de segmentação, que cria um item filho em pWiaItem2 para cada região detectada. Consulte DetectRegions para o método DetectSubregions usado neste exemplo.

Neste exemplo, o usuário do aplicativo define m_bUseSegmentationFilter clicando em uma caixa marcar. Se o aplicativo der suporte a isso, ele deverá primeiro marcar que o driver tenha um filtro de segmentação chamando CheckExtension. Consulte IWiaPreview::GetNewPreview para ver o exemplo do método CheckImgFilter que mostra como isso pode ser feito.

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 Valor
Cliente mínimo com suporte
Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2008 [somente aplicativos da área de trabalho]
Cabeçalho
Wia.h
IDL
Wia.idl