Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un pilote n’est pas tenu d’avoir son propre filtre de segmentation pour tirer parti du filtre de segmentation Microsoft, tant qu’il implémente la propriété WIA_IPS_SEGMENTATION. Une autre possibilité est qu’un IHV fournisse son propre filtre de segmentation, qui, dans certaines circonstances, appelle le filtre de segmentation WIA par défaut de Microsoft. Par exemple, un IHV peut souhaiter fournir un filtre de segmentation très spécifique à l'appareil pour la détection multirégion pendant la numérisation du film et utiliser le filtre de segmentation fourni par Microsoft lors des numérisations à partir du plateau. Pour ce faire, un filtre de segmentation WIA IHV doit uniquement créer CLSID_WiaDefaultSegFilter, qui implémente IWiaSegmentationFilter ; le filtre de segmentation appelle ensuite DetectRegions. L’exemple de code suivant montre comment procéder.
STDMETHODIMP
SegFilter::DetectRegions(
IN LONG lFlags,
IN IStream *pInputStream,
IN IWiaItem2 *pWiaItem2)
{
HRESULT hr = S_OK;
GUID categoryGUID = {0};
BOOL bUseDefaultFilter = FALSE;
...
if (SUCCEEDED(hr))
{
ReadPropertyLong(pWiaItem2,
WIA_IPA_ITEM_CATEGORY,
&categoryGUID);
if (categoryGUID == WIA_CATEGORY_FILM)
{
bUseDefaultFilter = FALSE;
}
else if (categoryGUID == WIA_CATEGORY_FLATBED)
{
bUseDefaultFilter = TRUE;
}
else
{
//
// This scanner only comes with flatbed and film items.
//
hr = E_INVALIDARG;
}
}
...
if (SUCCEEDED(hr) && bUseDefaultFilter)
{
//
// This must be on the flatbed item - use the Microsoft Default WIA Segmentation Filter.
//
IWiaSegmentationFilter *pDefaultSegFilter = NULL;
hr = CoCreateInstance(CLSID_WiaDefaultSegFilter,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWiaSegmentationFilter,
reinterpret_cast<void **>(&pDefaultSegFilter));
if (SUCCEEDED(hr))
{
hr = pDefaultSegFilter->DetectRegions(lFlags, pInputStream, pWiaItem2);
}
if (pDefaultSegFilter)
{
pDefaultSegFilter->Release();
pDefaultSegFilter = NULL;
}
}
else if (SUCCEEDED(hr))
{
//
// This is on the film item - use the default WIA segmentation algorithm.
//
...
}
...
}