IWiaSegmentationFilter::D etectRegions (método)
Determina las subárboles de una imagen colocada en la placa plana para que cada una de las subárboles se pueda adquirir en un elemento de imagen independiente.
Sintaxis
HRESULT DetectRegions(
[in] LONG lFlags,
[in] IStream *pInputStream,
[in] IWiaItem2 *pWiaItem2
);
Parámetros
-
lFlags [in]
-
Tipo: LONG
Actualmente no se usa. Debe establecerse como cero.
-
pInputStream [in]
-
Tipo: IStream*
Especifica un puntero a la imagen de vista previa de IStream .
-
pWiaItem2 [in]
-
Tipo: IWiaItem2*
Especifica un puntero al elemento IWiaItem2 para el que se adquirió pInputStream . El filtro de segmentación crea elementos secundarios para este elemento.
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
Este método determina las subárboles de la imagen representadas por pInputStream. Para cada subregión que detecta, crea un elemento secundario para el elemento IWiaItem2 especificado en el parámetro pWiaItem2 . Para cada elemento secundario, el filtro de segmentación debe establecer valores para el rectángulo delimitador del área que se va a examinar, utilizando las siguientes constantes de propiedad de elemento WIA del escáner.
Un filtro más avanzado también puede requerir otras constantes de propiedad de elemento WIA del escáner , como WIA_IPS_DESKEW_X y WIA_IPS_DESKEW_Y, si el controlador admite desfase.
Si la aplicación llama a IWiaSegmentationFilter::D etectRegions más de una vez, la aplicación debe eliminar primero los elementos secundarios creados por la última llamada a IWiaSegmentationFilter::D etectRegions.
Si una aplicación cambia las propiedades en pWiaItem2, entre adquirir la imagen en pInputStream y su llamada a IWiaSegmentationFilter::D etectRegions, se deben restaurar las propiedades originales (es decir, las propiedades que tenía el elemento cuando se adquirió la secuencia). Esto puede hacerse mediante GetPropertyStream y SetPropertyStream.
La aplicación debe restablecer IStream si su llamada pasa la misma secuencia al filtro de segmentación más de una vez. La aplicación también debe restablecer la secuencia después de la descarga inicial y antes de llamar a IWiaSegmentationFilter::D etectRegions.
Ejemplos
La segmentación realiza la detección de regiones en la secuencia (pImageStream
) pasada a DetectSubregions. Vea el método GetExtension for CreateSegmentationFilter usado en este ejemplo.
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 descarga datos de imagen del analizador llamando al método 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. Vea IWiaSegmentationFilter::D etectRegions 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 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 a 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 |
|
IDL |
|