IWiaPreview::GetNewPreview 메서드

드라이버에서 반환된 필터링되지 않은 이미지를 내부적으로 캐시합니다.

구문

HRESULT GetNewPreview(
  [in] IWiaItem2            *pWiaItem2,
  [in] LONG                 lFlags,
  [in] IWiaTransferCallback *pWiaTransferCallback
);

매개 변수

pWiaItem2 [in]

형식: IWiaItem2*

이미지의 IWiaItem2 항목에 대한 포인터를 지정합니다.

lFlags [in]

형식: LONG

현재 사용되지 않습니다. 0으로 설정해야 합니다.

pWiaTransferCallback [in]

형식: IWiaTransferCallback*

호출하는 애플리케이션의 IWiaTransferCallback 인터페이스에 대한 포인터를 지정합니다 .

반환 값

형식: HRESULT

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

애플리케이션은 IWiaPreview: :D etectRegions를 호출하기 전에 IWiaPreview::GetNewPreview를 호출해야 합니다.

IWiaPreview::GetNewPreviewWIA_DPS_PREVIEW 속성을 설정하고 이전에 설정하지 않은 한 반환하기 전에 다시 설정합니다. 이렇게 하면 드라이버 및 하드웨어와 이미지 처리 필터가 항목이 미리 보기 검사임을 알 수 있습니다.

내부적으로 WIA(Windows 이미지 획득) 2.0 미리 보기 구성 요소는 pWiaItem2에서 GetExtension을 호출하여 드라이버의 이미지 처리 필터의 instance 만듭니다. WIA 2.0 미리 보기 구성 요소는 애플리케이션이 IWiaPreview::GetNewPreview를 호출할 때 이 작업을 수행합니다. WIA 2.0 미리 보기 구성 요소는 IWiaPreview::GetNewPreview에서도 필터를 초기화합니다. IWiaPreview::UpdatePreview를 호출하는 동안 WIA 2.0 미리 보기 구성 요소에서 동일한 필터 instance 사용됩니다.

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 메서드를 호출하여 스캐너에서 이미지 데이터를 다운로드합니다. 그런 다음, 애플리케이션 사용자가 감지하는 각 지역에 대해 pWiaItem2 아래에 자식 항목을 만드는 구분 필터를 호출하려는 경우 DetectSubregions를 호출합니다. 이 예제에 사용된 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 [데스크톱 앱만 해당]
헤더
Wia.h
IDL
Wia.idl