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: :D etectRegions を呼び出す前に IWiaPreview::GetNewPreview を呼び出す必要があります。
IWiaPreview::GetNewPreview は 、WIA_DPS_PREVIEW プロパティを設定します (前に設定されていない限り、戻る前にリセットします)。 これにより、ドライバーとハードウェア、および画像処理フィルターは、アイテムがプレビュー スキャンであることを認識できます。
内部的には、Windows イメージ取得 (WIA) 2.0 プレビュー コンポーネントは、pWiaItem2 で GetExtension を呼び出すことによって、ドライバーの画像処理フィルターのインスタンスを作成します。 WIA 2.0 プレビュー コンポーネントは、アプリケーションが IWiaPreview::GetNewPreview を呼び出すときにこれを行います。 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 [デスクトップ アプリのみ] |
Header |
|
IDL |
|