예: 기본 세분화 필터
드라이버는 WIA_IPS_SEGMENTATION 속성을 구현하는 한 Microsoft 구분 필터를 활용하기 위해 자체 구분 필터를 가질 필요가 없습니다. 또 다른 가능성은 IHV가 특정 상황에서 Microsoft 기본 WIA 구분 필터를 호출하는 자체 구분 필터를 제공하는 것입니다. 예를 들어 IHV는 필름 스캔 중에 다중 지역 검색을 위한 매우 장치별 구분 필터를 제공하고 플랫베드에서 스캔하는 동안 Microsoft에서 제공하는 구분 필터를 사용할 수 있습니다. 이렇게 하려면 IHV WIA 구분 필터는 IWiaSegmentationFilter를 구현하는 CLSID_WiaDefaultSegFilter 만들어야 합니다. 그러면 구분 필터가 DetectRegions를 호출합니다. 다음 코드 예제에서는 이 작업을 수행하는 방법을 보여 있습니다.
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.
//
...
}
...
}