Metode IWiaSegmentationFilter::D etectRegions

Menentukan sub-wilayah gambar yang ditata pada platen flatbed sehingga masing-masing sub-wilayah dapat diperoleh ke dalam item gambar terpisah.

Sintaks

HRESULT DetectRegions(
  [in] LONG      lFlags,
  [in] IStream   *pInputStream,
  [in] IWiaItem2 *pWiaItem2
);

Parameter

lFlags [in]

Jenis: LONG

Saat ini tidak digunakan. Harus diatur ke nol.

pInputStream [in]

Jenis: IStream*

Menentukan penunjuk ke gambar pratinjau IStream .

pWiaItem2 [in]

Jenis: IWiaItem2*

Menentukan penunjuk ke item IWiaItem2 tempat pInputStream diperoleh. Filter segmentasi membuat item anak untuk item ini.

Menampilkan nilai

Jenis: HRESULT

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

Keterangan

Metode ini menentukan sub-wilayah gambar yang diwakili oleh pInputStream. Untuk setiap sub-wilayah yang dideteksinya, ia membuat item anak untuk item IWiaItem2 yang ditentukan dalam parameter pWiaItem2 . Untuk setiap item anak, filter segmentasi harus mengatur nilai untuk persegi panjang batas area untuk dipindai, menggunakan Pemindai Konstanta Properti Item WIA Pemindai berikut.

Filter yang lebih canggih mungkin juga memerlukan Konstanta Properti Item WIA Pemindai lainnya seperti WIA_IPS_DESKEW_X dan WIA_IPS_DESKEW_Y, jika driver mendukung de-condong.

Jika aplikasi memanggil IWiaSegmentationFilter::D etectRegions lebih dari sekali, aplikasi harus terlebih dahulu menghapus item anak yang dibuat oleh panggilan terakhir ke IWiaSegmentationFilter::D etectRegions.

Jika aplikasi mengubah properti apa pun menjadi pWiaItem2, antara memperoleh gambar ke pInputStream dan panggilannya ke IWiaSegmentationFilter::D etectRegions, properti asli (yaitu, properti yang dimiliki item ketika aliran diperoleh) harus dipulihkan. Ini dapat dilakukan oleh GetPropertyStream dan SetPropertyStream.

Aplikasi harus mengatur ulang IStream jika panggilannya melewati aliran yang sama ke filter segmentasi lebih dari sekali. Aplikasi juga harus mengatur ulang aliran setelah pengunduhan awal dan sebelum memanggil IWiaSegmentationFilter::D etectRegions.

Contoh

Segmentasi melakukan deteksi wilayah pada aliran (pImageStream) yang diteruskan ke DetectSubregions. Lihat metode GetExtension for CreateSegmentationFilter yang digunakan dalam contoh ini.

HRESULT
DetectSubregions(
   IN IStream   *pImageStream,
   IN IWiaItem2 *pWiaItem2)
{
   HRESULT                 hr                  = S_OK;
   IWiaSegmentationFilter* pSegmentationFilter = NULL;

   if (!pWiaItem2 || !pImageStream)
   {
      hr = E_INVALIDARG;
   }

   if (SUCCEEDED(hr))
   {
      hr = CreateSegmentationFilter(pWiaItem2, &pSegmentationFilter);
   }

   if (SUCCEEDED(hr))
   {
      hr = pSegmentationFilter->DetectRegions(0,pImageStream, pWiaItem2); 
   }

   if (pSegmentationFilter)
   {
      pSegmentationFilter->Release();
      pSegmentationFilter = NULL;
   }

   return hr;
}

DownloadPreviewImage mengunduh data gambar dari pemindai dengan memanggil metode 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 IWiaSegmentationFilter::D etectRegions 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 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 a 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