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 |
|
IDL |
|