Сканирование из приложения
В этом разделе описывается, как сканировать содержимое из приложения с помощью планшета, канала или автоматически настроенного источника сканирования.
Важные API
Важно!
API Windows.Devices.Scanners входят в семейство настольных устройств. Приложения могут использовать эти API только в настольной версии Windows 10.
Перед сканированием из приложения необходимо составить список доступных сканеров, объявив новый объект 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 будь то По умолчанию, Автоопределение, Планшет или Податчик, необходимо сначала создать объект ImageScanner, вызвав метод ImageScanner.FromIdAsync, как показано ниже.
ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
- Обычное сканирование
Чтобы выбрать сканер и сканировать с определенного источника с параметрами по умолчанию, приложение использует пространство имен Windows.Devices.Scanners. Никакие параметры сканирования не меняются. Возможные режимы сканирования: автовыбор, планшет, податчик бумаги При этом типе сканирования в большинстве случаев результаты успешны, даже если источник определен неправильно — например, планшет вместо податчика оригиналов.
Примечание Если пользователь помещает документ для сканирования в подающем канале, сканер будет выполнять сканирование с планшета. Если пользователь попытается сканировать из пустого податчика, задание сканирования не создаст ни одного отсканированного файла.
var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
folder).AsTask(cancellationToken.Token, progress);
- Сканирование с автоматическим определением источника с планшетного сканера или со сканера с модулем автоподачи оригиналов
Вы можете использовать в вашем приложении функцию Автоматическое сканирование устройства, чтобы сканирование выполнялось с оптимальными параметрами. В этом случае, исходя из сканируемого содержимого, устройство само сможет определить наилучшие параметры сканирования, например цветовой режим и разрешение. Устройство выбирает параметры сканирования в процессе выполнения для каждого нового задания сканирования.
Примечание Не все сканеры поддерживают эту функцию, поэтому приложение должно проверка, поддерживает ли сканер эту функцию, прежде чем использовать этот параметр.
В этом примере приложение сначала проверяет, поддерживает ли сканер возможность автовыбора, а затем сканирует. Чтобы указать планшетный сканер или сканер с модулем подачи, просто замените Автоопределение на Планшет или Податчик, соответственно.
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);
...
}
Предварительный просмотр при сканировании
Вы можете добавить код для предварительного просмотра результата сканирования перед запуском сканирования в папку. В следующем примере приложение проверяет, поддерживает ли сканер с параметром Планшет предварительный просмотр, а затем создает окно предварительного просмотра сканирования.
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, но, чтобы они могли сохранять результаты сканирования в библиотеке изображений, необходимо объявить возможность Библиотека изображений в манифесте. Дополнительные сведения о возможностях приложения см. в разделе Объявление возможностей приложения.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по