다음을 통해 공유


카메라 바코드 스캐너 시작하기

이 항목에서는 UWP 애플리케이션에서 기본 카메라 바코드 스캐너를 설정하는 방법을 설명합니다.

참고

Windows 10/11에 내장된 소프트웨어 디코더는 Digimarc Corporation에서 제공합니다.

다음의 코드 조각은 데모용으로만 제공됩니다. 전체 작업 샘플을 보려면 바코드 스캐너 샘플을 참조하세요.

1단계: 앱 매니페스트에 기능 선언 추가하기

  1. Microsoft Visual Studio의 솔루션 탐색기에서 package.appxmanifest 항목을 두 번 클릭하여 응용 프로그램 매니페스트 디자이너를 엽니다.
  2. 기능 탭을 선택합니다.
  3. 웹캠PointOfService 확인란을 선택합니다.

참고 항목

소프트웨어 디코더가 카메라에서 프레임을 수신하여 바코드를 디코딩하고 애플리케이션에 미리 보기를 제공하려면 웹캠 기능이 필요합니다.

2단계: using 지시문 추가하기

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

3단계: 디바이스 선택기 정의하기

BarcodeScanner.GetDeviceSelector 메서드 중 하나를 사용하여 연결된 각 바코드 스캐너에 대한 BarcodeScanner 개체를 가져옵니다.

옵션 A: 모든 바코드 스캐너 찾기

string selector = BarcodeScanner.GetDeviceSelector();

옵션 B: 범위를 기준으로 모든 바코드 스캐너 찾기(이 예에서는 로컬 연결 형식을 필터링함)

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

4단계: 바코드 스캐너 열거

애플리케이션 수명 동안 디바이스 목록이 변경되지 않을 것으로 예상되면 DeviceInformation.FindAllAsync를 사용하여 일회성 스냅샷을 가져옵니다. 그러나 애플리케이션 수명 동안 바코드 스캐너 목록이 변경될 수 있는 경우 대신 DeviceWatcher를 사용합니다.

Important

GetDefaultAsync를 사용하여 PointOfService 디바이스를 열거하면 클래스에서 발견된 첫 번째 디바이스(세션마다 변경될 수 있음)만 반환하므로 일관되지 않은 동작이 발생할 수 있습니다.

옵션 A: 3단계에서 만들어진 선택기를 기반으로 연결된 모든 바코드 스캐너의 스냅샷을 열거합니다.

이 코드 조각에서는 DeviceInformationCollection 개체를 만들고 ****DeviceInformation.FindAllAsync를 사용하여 이를 채웁니다.

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

DeviceInformation.FindAllAsync 사용에 대해 자세히 알아보려면 디바이스 스냅샷 열거하기를 참조하세요.

옵션 B: 3단계에서 만들어진 선택기를 기반으로 사용 가능한 바코드 스캐너를 열거하고 해당 컬렉션의 변경 내용을 관찰합니다.

이 코드 조각에서 DeviceWatcher를 만들기 위해 DeviceInformation.CreateWatcher를 사용합니다.

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();

자세한 내용은 디바이스 열거 및 감시DeviceWatcher를 참조하세요.

5단계: 카메라 바코드 스캐너 식별

카메라 바코드 스캐너는 Windows가 동적으로 쌍을 이루어 UWP(유니버설 Windows 플랫폼) 앱용으로 완전한 기능을 갖춘 바코드 스캐너를 만드는 소프트웨어 디코더와 결합된 카메라(컴퓨터에 연결됨)로 구성됩니다.

BarcodeScanner.VideoDeviceID는 카메라 바코드 스캐너와 실제 바코드 스캐너를 구별하는 데 사용할 수 있습니다. NULL이 아닌 VideoDeviceID는 디바이스 컬렉션의 바코드 스캐너 개체가 카메라 바코드 스캐너임을 나타냅니다. 카메라 바코드 스캐너가 둘 이상 있을 경우에는 물리적 바코드 스캐너를 제외한 별도의 컬렉션을 빌드할 수 있습니다.

Windows와 함께 배송된 바코더를 사용하는 카메라 바코드 스캐너가 다음과 같이 식별됩니다.

Microsoft BarcodeScanner(여기 카메라 이름)

카메라가 두 개 이상 있고 컴퓨터 섀시에 기본 제공된 경우 이름으로 전면 카메라와 후면 카메라를 구분할 수 있습니다.

DeviceWatcher가 시작되면(4단계: 바코드 스캐너 열거 참조) 연결된 각 디바이스를 열거합니다. 다음 코드 조각에서는 사용 가능한 각 스캐너를 BarcodeScanner 컬렉션에 추가하고 이 컬렉션을 ListBox에 바인딩합니다.

ObservableCollection<BarcodeScanner> barcodeScanners = 
  new ObservableCollection<BarcodeScanner>();

private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        barcodeScanners.Add(new BarcodeScanner(args.Name, args.Id));

        // Select the first scanner by default.
        if (barcodeScanners.Count == 1)
        {
            ScannerListBox.SelectedIndex = 0;
        }
    });
}

ListBoxSelectedIndex가 변경되면(이전 코드 조각에서는 첫 번째 항목이 기본적으로 선택됨) 디바이스 정보를 쿼리합니다(SelectScannerAsync 작업은 6단계: 카메라 바코드 스캐너 클레임에서 구현됨).

private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
    var selectedScannerInfo = (BarcodeScanner)args.AddedItems[0];
    var deviceId = selectedScannerInfo.DeviceId;

    await SelectScannerAsync(deviceId);
}

6단계: 카메라 바코드 스캐너 클레임

BarcodeScanner.ClaimScannerAsync를 호출하여 카메라 바코드 스캐너에 대한 독점적 이용권을 획득합니다.

private async Task SelectScannerAsync(string scannerDeviceId)
{
    selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);

    if (selectedScanner != null)
    {
        claimedScanner = await selectedScanner.ClaimScannerAsync();
        if (claimedScanner != null)
        {
            await claimedScanner.EnableAsync();
        }
        else
        {
            rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
        }
    }
    else
    {
        rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
    }
}

7단계: 시스템에서 제공되는 미리 보기

사용자가 카메라를 바코드에 맞추는 데 도움이 되도록 카메라 미리 보기가 필요합니다. Windows는 카메라 바코드 스캐너를 제어하기 위한 대화 상자를 시작하는 기본 카메라 미리 보기를 제공합니다.

대화 상자를 열려면 ClaimedBarcodeScanner.ShowVideoPreview를 호출하고 닫으려면 ClaimedBarcodeScanner.HideVideoPreview를 호출합니다.

애플리케이션에서 카메라 바코드 스캐너에 대한 미리 보기를 호스팅하는 방법은 미리 보기 호스팅을 참조하세요.

8단계: 검사 시작

StartSoftwareTriggerAsync를 호출하여 스캔 프로세스를 시작할 수 있습니다.

IsDisabledOnDataReceived 값에 따라 스캐너는 오직 하나의 바코드만 스캔한 다음, 중지하거나 StopSoftwareTriggerAsync가 호출될 때까지 계속해서 스캔을 할 수 있습니다.

바코드가 디코딩될 때 스캐너 동작을 제어하도록 IsDisabledOnDataReceived를 원하는 값으로 설정합니다.

설명
True 하나의 바코드만 스캔한 다음, 중지
False 중단 없이 지속적으로 바코드 스캔하기

참고 항목