Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tópico descreve como digitalizar conteúdo da sua aplicação usando um scanner plano, alimentador ou uma fonte de digitalização auto-configurada.
APIs importantes
- Windows.Devices.Scanners
- InformaçãoDoDispositivo
- ClasseDeDispositivo
Para digitalizar a partir da sua aplicação, o utilizador deve primeiro listar os scanners disponíveis, declarando um novo objeto DeviceInformation e obtendo o tipo DeviceClass. Apenas os scanners instalados localmente com drivers WIA são listados e estão disponíveis para seu aplicativo.
Depois de a sua aplicação listar os scanners disponíveis, pode usar as definições de digitalização configuradas automaticamente com base no tipo de scanner ou apenas digitalizar usando a fonte de digitalização disponível de mesa ou alimentador. Para usar as configurações configuradas automaticamente, o scanner deve estar habilitado para configuração automática e não deve estar equipado com um scanner de mesa e um scanner de alimentação. Para obter mais informações, consulte Digitalização Configurada Automaticamente.
Enumerar digitalizadores disponíveis
O Windows não deteta scanners automaticamente. Você deve executar esta etapa para que seu aplicativo se comunique com o scanner. Neste exemplo, a enumeração do dispositivo de varredura é feita usando o namespace Windows.Devices.Enumeration .
- Primeiro, adicione essas instruções using ao seu arquivo de definição de classe.
using Windows.Devices.Enumeration;
using Windows.Devices.Scanners;
- Em seguida, implemente um inspetor de dispositivo para começar a enumerar scanners. Para obter mais informações, consulte Listar Dispositivos.
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;
}
- Crie um manipulador de eventos para quando um scanner for adicionado.
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);
}
);
}
Digitalizar
- Obter um objeto ImageScanner
Para cada tipo de enumeração
ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
- Basta digitalizar
Para digitalizar com as configurações padrão, a sua aplicação depende do namespace Windows.Devices.Scanners para selecionar um scanner e digitaliza a partir dessa fonte. Nenhuma configuração de verificação é alterada. Os scanners possíveis são auto-configuráveis, de mesa ou com alimentador. Este tipo de digitalização provavelmente produzirá uma operação bem-sucedida, mesmo que seja feita a partir de uma fonte incorreta, como um scanner de mesa em vez de um alimentador.
Nota Se o utilizador colocar o documento para digitalizar no alimentador, o scanner irá digitalizar a partir da superfície plana. Se o utilizador tentar digitalizar a partir de um alimentador vazio, a tarefa de digitalização não produzirá nenhum ficheiro digitalizado.
var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
folder).AsTask(cancellationToken.Token, progress);
- Digitalizar a partir de origem configurada automaticamente, mesa plana ou alimentadora
Seu aplicativo pode usar a Varredura Configurada Automaticamente do dispositivo para verificar com as configurações de verificação ideais. Com essa opção, o próprio dispositivo pode determinar as melhores configurações de digitalização, como modo de cor e resolução de digitalização, com base no conteúdo que está sendo digitalizado. O dispositivo seleciona as configurações de digitalização durante a execução para cada novo trabalho de digitalização.
Observação Nem todos os scanners suportam esse recurso, portanto, o aplicativo deve verificar se o scanner suporta esse recurso antes de usar essa configuração.
Neste exemplo, o aplicativo primeiro verifica se o scanner é capaz de configuração automática e, em seguida, verifica. Para especificar um scanner de mesa plana ou alimentador, basta substituir Autoconfigurado por Mesa Plana ou Alimentador.
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);
...
}
Pré-visualizar a análise
É possível adicionar código para pré-visualizar a digitalização antes de digitalizar para uma pasta. No exemplo abaixo, a aplicação verifica se o scanner Flatbed suporta visualização e, em seguida, visualiza a digitalização.
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);
Cancelar a verificação
Você pode permitir que os usuários cancelem o trabalho de verificação no meio de uma verificação, como esta.
void CancelScanning()
{
if (ModelDataContext.ScenarioRunning)
{
if (cancellationToken != null)
{
cancellationToken.Cancel();
}
DisplayImage.Source = null;
ModelDataContext.ScenarioRunning = false;
ModelDataContext.ClearFileList();
}
}
Digitalização com progresso
- Crie um objeto System.Threading.CancellationTokenSource.
cancellationToken = new CancellationTokenSource();
- Configure o handler de eventos de progresso e obtenha o progresso da verificação.
rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
var progress = new Progress<UInt32>(ScanProgress);
Digitalização para a biblioteca de imagens
Os utilizadores podem efetuar a digitalização para qualquer pasta dinamicamente usando a classe FolderPicker, mas é necessário declarar o recurso Biblioteca de Imagens no manifesto para permitir que os utilizadores façam a digitalização para essa pasta. Para saber mais sobre os recursos do aplicativo, veja Declarações de recursos do aplicativo.
Windows developer