Método IWiaSegmentationFilter::D etectRegions
Determina as sub-regiões de uma imagem disposta no flatbed platen para que cada uma das sub-regiões possa ser adquirida em um item de imagem separado.
Sintaxe
HRESULT DetectRegions(
[in] LONG lFlags,
[in] IStream *pInputStream,
[in] IWiaItem2 *pWiaItem2
);
Parâmetros
-
lFlags [in]
-
Tipo: LONG
Atualmente não utilizado. Deve ser definido como zero.
-
pInputStream [in]
-
Tipo: IStream*
Especifica um ponteiro para a imagem de visualização do IStream .
-
pWiaItem2 [in]
-
Tipo: IWiaItem2*
Especifica um ponteiro para o item IWiaItem2 para o qual pInputStream foi adquirido. O filtro de segmentação cria itens filho para este item.
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
Esse método determina as sub-regiões da imagem representada por pInputStream. Para cada sub-região detectada, ele cria um item filho para o item IWiaItem2 especificado no parâmetro pWiaItem2 . Para cada item filho, o filtro de segmentação deve definir valores para o retângulo delimitador da área a ser verificado, usando as seguintes Constantes de Propriedade de Item wia do scanner.
Um filtro mais avançado também pode exigir outras constantes de propriedade de item wia do scanner , como WIA_IPS_DESKEW_X e WIA_IPS_DESKEW_Y, se o driver der suporte à desanexação.
Se o aplicativo chamar IWiaSegmentationFilter::D etectRegions mais de uma vez, o aplicativo deverá primeiro excluir os itens filho criados pela última chamada para IWiaSegmentationFilter::D etectRegions.
Se um aplicativo alterar as propriedades em pWiaItem2, entre adquirir a imagem em pInputStream e sua chamada para IWiaSegmentationFilter::D etectRegions, as propriedades originais (ou seja, as propriedades que o item tinha quando o fluxo foi adquirido) deverão ser restauradas. Isso pode ser feito por GetPropertyStream e SetPropertyStream.
O aplicativo deve redefinir o IStream se sua chamada passar o mesmo fluxo para o filtro de segmentação mais de uma vez. O aplicativo também deve redefinir o fluxo após o download inicial e antes de chamar IWiaSegmentationFilter::D etectRegions.
Exemplos
A segmentação executa a detecção de região no fluxo (pImageStream
) passado para DetectSubregions. Consulte o método GetExtension for CreateSegmentationFilter usado neste exemplo.
HRESULT
DetectSubregions(
IN IStream *pImageStream,
IN IWiaItem2 *pWiaItem2)
{
HRESULT hr = S_OK;
IWiaSegmentationFilter* pSegmentationFilter = NULL;
if (!pWiaItem2 || !pImageStream)
{
hr = E_INVALIDARG;
}
if (SUCCEEDED(hr))
{
hr = CreateSegmentationFilter(pWiaItem2, &pSegmentationFilter);
}
if (SUCCEEDED(hr))
{
hr = pSegmentationFilter->DetectRegions(0,pImageStream, pWiaItem2);
}
if (pSegmentationFilter)
{
pSegmentationFilter->Release();
pSegmentationFilter = NULL;
}
return hr;
}
DownloadPreviewImage baixa dados de imagem do verificador chamando o método 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 IWiaSegmentationFilter::D etectRegions 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 GetNewPreview para obter o exemplo de 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 a 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 |
|