Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik nie musi mieć własnego filtru segmentacji, aby móc korzystać z filtru segmentacji firmy Microsoft, o ile implementuje właściwość WIA_IPS_SEGMENTATION. Inną możliwością jest udostępnienie przez IHV własnego filtru segmentacji, który w pewnych okolicznościach wywołuje domyślny filtr segmentacji WIA firmy Microsoft. Na przykład IHV może chcieć zapewnić bardzo specyficzny dla urządzenia filtr segmentacji na potrzeby wykrywania wielu regionów podczas skanowania filmowego i użyć filtru segmentacji dostarczonego przez firmę Microsoft podczas skanowania z płaskiego łoża. W tym celu filtr segmentacji IHV WIA musi utworzyć tylko CLSID_WiaDefaultSegFilter, który implementuje filtr IWiaSegmentationFilter. Następnie filtr segmentacji wywoła funkcję DetectRegions. Poniższy przykład kodu pokazuje, jak można to zrobić.
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.
//
...
}
...
}