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 |
|
IDL |
|
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk