Méthode IWiaPreview::GetNewPreview
Met en cache en interne l’image non filtrée retournée par le pilote.
Syntaxe
HRESULT GetNewPreview(
[in] IWiaItem2 *pWiaItem2,
[in] LONG lFlags,
[in] IWiaTransferCallback *pWiaTransferCallback
);
Paramètres
-
pWiaItem2 [in]
-
Type : IWiaItem2*
Spécifie un pointeur vers l’élément IWiaItem2 pour l’image.
-
lFlags [in]
-
Type : LONG
Actuellement inutilisé. Doit être défini sur zéro (0).
-
pWiaTransferCallback [in]
-
Type : IWiaTransferCallback*
Spécifie un pointeur vers l’interface IWiaTransferCallback de l’application appelante.
Valeur retournée
Type : HRESULT
Si cette méthode réussit, elle retourne S_OK. Sinon, il retourne un code d’erreur HRESULT .
Notes
Une application doit appeler IWiaPreview::GetNewPreview avant d’appeler IWiaPreview::D etectRegions.
IWiaPreview::GetNewPreview définit la propriété WIA_DPS_PREVIEW (et la réinitialise avant qu’elle ne soit retournée, sauf si elle a été définie avant). Cela permet au pilote et au matériel, ainsi qu’au filtre de traitement d’image, de savoir que l’élément est une analyse en préversion.
En interne, le composant Windows Image Acquisition (WIA) 2.0 preview crée une instance du filtre de traitement d’image du pilote en appelant GetExtension sur pWiaItem2. Le composant wia 2.0 preview le fait lorsque l’application appelle IWiaPreview::GetNewPreview. Le composant de préversion WIA 2.0 initialise également le filtre dans IWiaPreview::GetNewPreview. Le même filtre instance est utilisé par le composant de préversion WIA 2.0 lors d’un appel à IWiaPreview::UpdatePreview.
Avant d’appeler le composant de préversion WIA 2.0, une application doit appeler CheckExtension pour s’assurer que le pilote est fourni avec un filtre de traitement d’image. Il doit appeler CheckExtension sur l’élément qu’il passerait à IWiaPreview::GetNewPreview. Il est inutile de fournir des aperçus en direct sans filtre de traitement d’image. Si une application appelle IWiaPreview::GetNewPreview pour un pilote sans filtre de traitement d’image, l’appel échoue.
Exemples
CheckImgFilter vérifie si le pilote dispose d’un filtre de traitement d’image. Avant d’appeler le composant d’aperçu, une application doit s’assurer que le pilote dispose d’un filtre de traitement d’image.
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 télécharge les données d’image à partir du scanneur en appelant la méthode IWiaPreview::GetNewPreview du composant d’aperçu. Il appelle ensuite DetectSubregions si l’utilisateur de l’application souhaite appeler le filtre de segmentation, ce qui crée un élément enfant sous pWiaItem2 pour chaque région qu’il détecte. Consultez DetectRegions pour connaître la méthode DetectSubregions utilisée dans cet exemple.
Dans cet exemple, l’utilisateur de l’application définit m_bUseSegmentationFilter
en cliquant sur une zone de case activée. Si l’application prend en charge cela, elle doit d’abord case activée que le pilote dispose d’un filtre de segmentation en appelant CheckExtension. Consultez IWiaPreview::GetNewPreview pour obtenir l’exemple de méthode CheckImgFilter qui montre comment procéder.
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;
}
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge |
Windows Server 2008 [applications de bureau uniquement] |
En-tête |
|
IDL |
|