Сканирование из приложения
В этом разделе описывается, как сканировать содержимое из приложения с помощью плоского, веб-канала или источника автоматической проверки.
Важные API
Чтобы проверить приложение, необходимо сначала перечислить доступные сканеры, объявив новый объект DeviceInformation и получив тип DeviceClass. Перечислены и доступны только сканеры, установленные локально с драйверами WIA.
После того как приложение перечислило доступные сканеры, оно может использовать параметры автоматической проверки на основе типа сканера или просто сканировать с помощью доступного источника сканирования плоских или веб-каналов. Чтобы использовать автоматически настроенные параметры, средство проверки должно быть включено для автоматической настройки и не должно быть оснащено как плоской, так и сканером канала. Дополнительные сведения см. в разделе "Автоматическое сканирование".
Перечисление доступных сканеров
Windows не обнаруживает сканеры автоматически. Для взаимодействия приложения с сканером необходимо выполнить этот шаг. В этом примере перечисление устройств сканера выполняется с помощью пространства имен Windows.Devices.Enumeration.
- Сначала добавьте эти инструкции с помощью в файл определения класса.
using Windows.Devices.Enumeration;
using Windows.Devices.Scanners;
- Затем реализуйте наблюдатель за устройствами, чтобы начать перечисление сканеров. Дополнительные сведения см. в разделе "Перечисление устройств".
void InitDeviceWatcher()
{
// Create a Device Watcher class for type Image Scanner for enumerating scanners
scannerWatcher = DeviceInformation.CreateWatcher(DeviceClass.ImageScanner);
scannerWatcher.Added += OnScannerAdded;
scannerWatcher.Removed += OnScannerRemoved;
scannerWatcher.EnumerationCompleted += OnScannerEnumerationComplete;
}
- Создайте обработчик событий при добавлении сканера.
private async void OnScannerAdded(DeviceWatcher sender, DeviceInformation deviceInfo)
{
await
MainPage.Current.Dispatcher.RunAsync(
Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
MainPage.Current.NotifyUser(String.Format("Scanner with device id {0} has been added", deviceInfo.Id), NotifyType.StatusMessage);
// search the device list for a device with a matching device id
ScannerDataItem match = FindInList(deviceInfo.Id);
// If we found a match then mark it as verified and return
if (match != null)
{
match.Matched = true;
return;
}
// Add the new element to the end of the list of devices
AppendToList(deviceInfo);
}
);
}
Сканировать
- Получение объекта ImageScanner
Для каждого типа перечисления ImageScannerScanSource, будь то Default, AutoConfigured, Flatbed или Feeder, необходимо сначала создать объект ImageScanner, вызвав метод ImageScanner.FromIdAsync.
ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
- Просто сканировать
Чтобы проверить параметры по умолчанию, приложение использует пространство имен Windows.Devices.Scanners для выбора сканера и сканирования из этого источника. Параметры сканирования не изменяются. Возможные сканеры настраиваются автоматически, плоские или веб-каналы. Этот тип сканирования, скорее всего, будет производить успешную операцию сканирования, даже если она сканируется из неправильного источника, например плоские, а не канал.
Обратите внимание , что если пользователь помещает документ для сканирования в веб-канале, средство проверки будет сканироваться с плоского диска. Если пользователь пытается проверить с пустого веб-канала, задание сканирования не будет создавать отсканированные файлы.
var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
folder).AsTask(cancellationToken.Token, progress);
- Сканирование из автоматически настроенного источника, неструктурированного или веб-канала
Приложение может использовать автоматическое сканирование устройства для проверки с помощью наиболее оптимальных параметров сканирования. С помощью этого параметра само устройство может определить лучшие параметры сканирования, такие как цветовой режим и разрешение сканирования, на основе отсканированного содержимого. Устройство выбирает параметры сканирования во время выполнения для каждого нового задания сканирования.
Обратите внимание , что не все сканеры поддерживают эту функцию, поэтому приложение должно проверить, поддерживает ли сканер эту функцию перед использованием этого параметра.
В этом примере приложение сначала проверяет, может ли сканер автоматически настраиваться, а затем сканирует. Чтобы указать средство проверки плоских или лентяных каналов, просто замените autoConfigured на Flatbed или Feeder.
if (myScanner.IsScanSourceSupported(ImageScannerScanSource.AutoConfigured))
{
...
// Scan API call to start scanning with Auto-Configured settings.
var result = await myScanner.ScanFilesToFolderAsync(
ImageScannerScanSource.AutoConfigured, folder).AsTask(cancellationToken.Token, progress);
...
}
Предварительный просмотр сканирования
Вы можете добавить код для предварительного просмотра сканирования перед сканированием в папку. В приведенном ниже примере приложение проверяет, поддерживает ли сканер Flatbed предварительную версию, а затем предварительно просматривает сканирование.
if (myScanner.IsPreviewSupported(ImageScannerScanSource.Flatbed))
{
rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
// Scan API call to get preview from the flatbed.
var result = await myScanner.ScanPreviewToStreamAsync(
ImageScannerScanSource.Flatbed, stream);
Отмена сканирования
Вы можете разрешить пользователям отменить задание сканирования в середине сканирования, как показано ниже.
void CancelScanning()
{
if (ModelDataContext.ScenarioRunning)
{
if (cancellationToken != null)
{
cancellationToken.Cancel();
}
DisplayImage.Source = null;
ModelDataContext.ScenarioRunning = false;
ModelDataContext.ClearFileList();
}
}
Сканирование с ходом выполнения
- Создайте объект System.Threading.CancellationTokenSource.
cancellationToken = new CancellationTokenSource();
- Настройте обработчик событий хода выполнения и получите ход сканирования.
rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
var progress = new Progress<UInt32>(ScanProgress);
Сканирование в библиотеке изображений
Пользователи могут динамически сканировать любую папку с помощью класса FolderPicker, но необходимо объявить возможность библиотеки изображений в манифесте, чтобы разрешить пользователям сканировать эту папку. Дополнительные сведения о возможностях приложений см . в объявлениях возможностей приложений.
Windows developer