Share via


앱에서 스캔하기

이 항목은 플랫베드, 피더 또는 자동 구성된 검사 원본을 사용하여 앱에서 콘텐츠를 검색하는 방법을 설명합니다.

중요 API

중요

Windows.Devices.Scanners API는 데스크톱 디바이스 패밀리의 일부입니다. 앱은 Windows 10의 데스크톱 버전에서만 이러한 API를 사용할 수 있습니다.

앱에서 검색하려면 먼저 새로운 DeviceInformation 개체를 선언하고DeviceClass 형식을 가져옴으로써 사용 가능한 스캐너를 나열해야 합니다. WIA 드라이버와 함께 로컬로 설치된 스캐너만 나열되며 앱에서 사용할 수 있습니다.

앱에서 사용 가능한 스캐너를 나열한 후에는 스캐너 형식에 따라 자동 구성된 검사 설정을 사용하거나 사용 가능한 플랫베드 또는 피더 검사 원본을 사용하여 스캔할 수 있습니다. 자동 구성 설정을 사용하려면 스캐너를 자동 구성에 사용하도록 설정해야 하며 플랫베드 및 피더 스캐너를 모두 장착해서는 안 됩니다. 자세한 정보는 자동 구성된 검사를 참조하세요.

사용 가능한 스캐너 열거하기

Windows는 스캐너를 자동으로 검색하지 않습니다. 이 단계를 수행해야 앱이 스캐너와 통신하게 만들 수 있습니다. 이 예시에서는 스캐너 디바이스 열거를 수행하기 위해 Windows.Devices.Enumeration 네임스페이스를 사용합니다.

  1. 먼저 이러한 using 문을 클래스 정의 파일에 추가합니다.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. 다음으로, 디바이스 감시자를 구현하여 스캐너 열거를 시작합니다. 더 알아보려면 디바이스 열거하기를 참조하세요.
    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;
    }
  1. 스캐너가 추가되는 경우에 대한 이벤트 처리기를 만듭니다.
    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);
             }
       );
    }

스캔

  1. ImageScanner 개체 가져오기

ImageScannerScanSource 열거 형식(Default, AutoConfigured, Flatbed 또는 Feeder)에 대해 먼저 ImageScanner.FromIdAsync 메서드를 호출하여 ImageScanner 개체를 만들어야 합니다.

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. 스캔만

기본 설정을 사용하여 검색하기 위해 앱은 Windows.Devices.Scanners 네임스페이스를 사용하여 스캐너를 선택하고 해당 원본에서 스캔합니다. 변경된 스캔 설정이 없습니다. 가능한 스캐너는 자동 구성, 플랫베드 또는 피더입니다. 이러한 형식의 스캔은 잘못된 소스에서 스캔하는 경우(예: 피더 대신 플랫베드 사용)에도 성공적인 스캔 작업을 생성할 가능성이 큽니다.

참고 사용자가 피더에서 스캔할 문서를 배치하는 경우 스캐너는 대신 플랫베드에서 스캔합니다. 사용자가 빈 피더에서 스캔을 시도하는 경우, 스캔 작업이 스캔된 파일을 생성하지 않습니다.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. 자동 구성, 평판 또는 공급 장치 소스에서 스캔하기

앱은 디바이스의 자동 구성 스캔을 사용하여 가장 최적의 검색 설정을 검사할 수 있습니다. 이 옵션을 사용하면 디바이스 자체에서 스캔되는 콘텐츠에 따라 색 모드 및 스캔 해상도 등의 최상의 스캔 설정을 결정할 수 있습니다. 디바이스는 런타임에 새로운 스캔 작업 각각에 대한 스캔 설정을 선택합니다.

참고 모든 스캐너가 이 기능을 지원하는 것은 아니므로 앱은 이 설정을 사용하기 전에 스캐너가 이 기능을 지원하는지 여부를 확인해야 합니다.

이 예시에서 앱은 먼저 스캐너가 자동 구성이 가능한지 여부를 확인합니다. 플랫베드 또는 피더 스캐너를 지정하려면 자동 구성플랫베드 또는 피더로 바꾸기만 하면 됩니다.

    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();
    }
}

스캔 진행률

  1. System.Threading.CancellationTokenSource 개체를 만듭니다.
cancellationToken = new CancellationTokenSource();
  1. 진행률 이벤트 처리기를 설정하고 스캔 진행률을 가져옵니다.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

사진 라이브러리로 스캔하기

사용자는 FolderPicker 클래스를 사용하여 동적으로 폴더를 검색할 수 있지만, 매니페스트에서 사진 라이브러리 기능을 선언해야 사용자가 해당 폴더를 검색할 수 있습니다. 앱 기능에 대한 자세한 정보는 앱 기능 선언을 참조하세요.