IWiaPreview::GetNewPreview 方法
在內部快取從驅動程式傳回的未篩選映射。
語法
HRESULT GetNewPreview(
[in] IWiaItem2 *pWiaItem2,
[in] LONG lFlags,
[in] IWiaTransferCallback *pWiaTransferCallback
);
參數
-
pWiaItem2 [in]
-
類型: IWiaItem2*
指定影像 之 IWiaItem2 專案的指標。
-
lFlags [in]
-
類型: LONG
目前未使用。 應該設定為零。
-
pWiaTransferCallback [in]
-
類型: IWiaTransferCallback*
指定呼叫應用程式的 IWiaTransferCallback 介面指標。
傳回值
類型: HRESULT
如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。
備註
應用程式必須先呼叫 IWiaPreview::GetNewPreview ,才能呼叫 IWiaPreview::D etectRegions。
IWiaPreview::GetNewPreview 會設定 WIA_DPS_PREVIEW 屬性 (,並在傳回之前重設它,除非在) 之前設定它。 這可讓驅動程式和硬體以及影像處理篩選器知道專案是預覽掃描。
在內部,Windows 映像擷取 (WIA) 2.0 預覽元件會呼叫pWiaItem2上的GetExtension來建立驅動程式影像處理篩選的實例。 當應用程式呼叫 IWiaPreview::GetNewPreview時,WIA 2.0 預覽元件會執行此動作。 WIA 2.0 預覽元件也會初始化 IWiaPreview::GetNewPreview中的篩選。 在 呼叫 IWiaPreview::UpdatePreview期間,WIA 2.0 預覽元件會使用相同的篩選實例。
在呼叫 WIA 2.0 預覽元件之前,應用程式應該呼叫 CheckExtension 以確保驅動程式隨附影像處理篩選器。 它應該在傳遞至IWiaPreview::GetNewPreview的專案上呼叫CheckExtension。 若沒有影像處理篩選準則,就無法提供即時預覽。 如果應用程式針對沒有影像處理篩選器的驅動程式呼叫 IWiaPreview::GetNewPreview ,呼叫將會失敗。
範例
CheckImgFilter 會檢查驅動程式是否有影像處理篩選器。 在呼叫預覽元件之前,應用程式應該先確定驅動程式有影像處理篩選器。
HRESULT
CheckImgFilter(
IN IWiaItem2 *pWiaItem2,
OUT BOOL *pbHasImgFilter)
{
HRESULT hr = S_OK;
if (!pWiaItem2 || !pbHasImgFilter)
{
hr = E_INVALIDARG;
}
if (SUCCEEDED(hr))
{
*pbHasImgFilter = FALSE;
}
if (SUCCEEDED(hr))
{
BSTR bstrFilterString = SysAllocString(WIA_IMAGEPROC_FILTER_STR);
if (bstrFilterString)
{
hr = pWiaItem2->CheckExtension(0,
bstrFilterString,
IID_IWiaSegmentationFilter,
pbHasImgFilter);
SysFreeString(bstrFilterString);
bstrFilterString = NULL;
}
else
{
hr = E_OUTOFMEMORY;
}
}
return hr;
}
DownloadPreviewImage 會呼叫預覽元件的 IWiaPreview::GetNewPreview 方法,從掃描器下載影像資料。 然後它會呼叫 DetectSubregions,如果應用程式使用者想要叫用分割篩選,這會針對偵測到的每個區域建立 pWiaItem2 下的子專案。 如需此範例中使用的 DetectSubregions 方法,請參閱 DetectRegions 。
在此範例中,應用程式使用者按一下核取方塊來設定 m_bUseSegmentationFilter
。 如果應用程式支援此功能,則應該先呼叫 CheckExtension來檢查驅動程式是否有分割篩選。 如需 CheckImgFilter 方法範例,請參閱 IWiaPreview::GetNewPreview ,以瞭解如何完成此作業。
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 segmentation filter, however, if the driver
// comes with one (omitted here).
}
}
return hr;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows Server 2008 [僅限傳統型應用程式] |
標頭 |
|
Idl |
|