Metode IWiaPreview::GetNewPreview

Cache secara internal gambar yang tidak difilter yang dikembalikan dari driver.

Sintaks

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

Parameter

pWiaItem2 [in]

Jenis: IWiaItem2*

Menentukan penunjuk ke item IWiaItem2 untuk gambar.

lFlags [in]

Jenis: LONG

Saat ini tidak digunakan. Harus diatur ke nol.

pWiaTransferCallback [in]

Jenis: IWiaTransferCallback*

Menentukan penunjuk ke antarmuka IWiaTransferCallback aplikasi panggilan.

Menampilkan nilai

Jenis: HRESULT

Jika metode ini berhasil, metode akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Aplikasi harus memanggil IWiaPreview::GetNewPreview sebelum memanggil IWiaPreview::D etectRegions.

IWiaPreview::GetNewPreview mengatur properti WIA_DPS_PREVIEW (dan mengatur ulang sebelum kembali, kecuali ditetapkan sebelumnya). Ini memungkinkan driver dan perangkat keras, serta filter pemrosesan gambar, mengetahui bahwa item tersebut adalah pemindaian pratinjau.

Secara internal, komponen pratinjau Windows Image Acquisition (WIA) 2.0 membuat instans filter pemrosesan gambar driver dengan memanggil GetExtension di pWiaItem2. Komponen pratinjau WIA 2.0 melakukan ini ketika aplikasi memanggil IWiaPreview::GetNewPreview. Komponen pratinjau WIA 2.0 juga menginisialisasi filter di IWiaPreview::GetNewPreview. Instans filter yang sama digunakan oleh komponen pratinjau WIA 2.0 selama panggilan ke IWiaPreview::UpdatePreview.

Sebelum memanggil komponen pratinjau WIA 2.0, aplikasi harus memanggil CheckExtension untuk memastikan bahwa driver dilengkapi dengan filter pemrosesan gambar. Ini harus memanggil CheckExtension pada item yang akan diteruskan ke IWiaPreview::GetNewPreview. Tidak ada gunanya menyediakan pratinjau langsung tanpa filter pemrosesan gambar. Jika aplikasi memanggil IWiaPreview::GetNewPreview untuk driver tanpa filter pemrosesan gambar, panggilan akan gagal.

Contoh

CheckImgFilter memeriksa apakah driver memiliki filter pemrosesan gambar. Sebelum memanggil komponen pratinjau, aplikasi harus memastikan bahwa driver memiliki filter pemrosesan gambar.

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 mengunduh data gambar dari pemindai dengan memanggil metode IWiaPreview::GetNewPreview komponen pratinjau. Kemudian memanggil DetectSubregions jika pengguna aplikasi ingin memanggil filter segmentasi, yang membuat item anak di bawah pWiaItem2 untuk setiap wilayah yang dideteksinya. Lihat DetectRegions untuk metode DetectSubregions yang digunakan dalam contoh ini.

Dalam contoh ini, pengguna aplikasi mengatur m_bUseSegmentationFilter dengan mengklik kotak centang. Jika aplikasi mendukung ini, pertama-tama harus memeriksa bahwa driver memiliki filter segmentasi dengan memanggil CheckExtension. Lihat IWiaPreview::GetNewPreview untuk contoh metode CheckImgFilter yang menunjukkan bagaimana hal ini dapat dilakukan.

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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2008 [hanya aplikasi desktop]
Header
Wia.h
IDL
Wia.idl