Metodo IWiaPreview::GetNewPreview
Memorizza nella cache internamente l'immagine non filtrata restituita dal driver.
Sintassi
HRESULT GetNewPreview(
[in] IWiaItem2 *pWiaItem2,
[in] LONG lFlags,
[in] IWiaTransferCallback *pWiaTransferCallback
);
Parametri
-
pWiaItem2 [in]
-
Tipo: IWiaItem2*
Specifica un puntatore all'elemento IWiaItem2 per l'immagine.
-
lFlags [in]
-
Tipo: LONG
Attualmente inutilizzato. Deve essere impostato su zero.
-
pWiaTransferCallback [in]
-
Tipo: IWiaTransferCallback*
Specifica un puntatore all'interfaccia IWiaTransferCallback dell'applicazione chiamante.
Valore restituito
Tipo: HRESULT
Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .
Commenti
Un'applicazione deve chiamare IWiaPreview::GetNewPreview prima di chiama IWiaPreview::D etectRegions.
IWiaPreview::GetNewPreview imposta la proprietà WIA_DPS_PREVIEW e la reimposta prima di restituirla, a meno che non sia stata impostata prima. In questo modo il driver e l'hardware, oltre al filtro di elaborazione delle immagini, sanno che l'elemento è un'analisi di anteprima.
Internamente, il componente windows Image Acquisition (WIA) 2.0 preview crea un'istanza del filtro di elaborazione delle immagini del driver chiamando GetExtension in pWiaItem2. Il componente di anteprima WIA 2.0 esegue questa operazione quando l'applicazione chiama IWiaPreview::GetNewPreview. Il componente di anteprima WIA 2.0 inizializza anche il filtro in IWiaPreview::GetNewPreview. La stessa istanza di filtro viene usata dal componente di anteprima WIA 2.0 durante una chiamata a IWiaPreview::UpdatePreview.
Prima di chiamare il componente di anteprima WIA 2.0, un'applicazione deve chiamare CheckExtension per assicurarsi che il driver sia dotato di un filtro di elaborazione delle immagini. Dovrebbe chiamare CheckExtension nell'elemento che passerebbe a IWiaPreview::GetNewPreview. È inutile fornire anteprime live senza un filtro di elaborazione delle immagini. Se un'applicazione chiama IWiaPreview::GetNewPreview per un driver senza un filtro di elaborazione immagini, la chiamata avrà esito negativo.
Esempio
CheckImgFilter verifica se il driver ha un filtro di elaborazione delle immagini. Prima di chiamare il componente di anteprima, un'applicazione deve assicurarsi che il driver disponga di un filtro di elaborazione delle immagini.
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 scarica i dati dell'immagine dallo scanner chiamando il metodo IWiaPreview del componente di anteprima::GetNewPreview . Chiama quindi DetectSubregions se l'utente dell'applicazione vuole richiamare il filtro di segmentazione, che crea un elemento figlio in pWiaItem2 per ogni area rilevata. Vedere DetectRegions per il metodo DetectSubregions usato in questo esempio.
In questo esempio, l'utente dell'applicazione imposta m_bUseSegmentationFilter
facendo clic su una casella di controllo. Se l'applicazione supporta questa operazione, deve prima verificare che il driver disponga di un filtro di segmentazione chiamando CheckExtension. Vedere L'esempio di metodo IWiaPreview::GetNewPreview per il metodo CheckImgFilter che illustra come eseguire questa operazione.
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;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows Vista [solo app desktop] |
Server minimo supportato |
Windows Server 2008 [solo app desktop] |
Intestazione |
|
IDL |
|