.NET 5에서 Windows Runtime API를 호출하는 것이 매우 쉬워졌습니다.

6833 단어 C#.NETWindows10
.NET 5 Preview 8에서 보이지만 Windows 10 API에 .NET 5에서 액세스하는 것이 매우 쉬워졌습니다. 언급된 기사는 다음과 같습니다.
  • Announcing .NET 5.0 Preview 8
  • Calling Windows APIs in .NET5

  • 얼마나 쉬워졌는가 하면 이번 기사가 곧 끝나는 수준에서 간단합니다. 곧 끝나면 슬프기 때문에, 조금 옛날에 비해 얼마나 간단합니까? 라고 하는 것도 써 두려고 합니다.

    옛날



    Windows 10 SDK의 특정 폴더에 있는 DLL이나 winmd 파일을 수동으로 참조 추가한 다음, 배포시에 포함하고 싶지 않은 파일은 복사되지 않도록 수동으로 설정한다.
    그렇게 숫자는 많지 않지만 귀찮았습니다.

    지금


    Microsoft.Windows.SDK.Contracts라는 NuGet 패키지가 추가되었으므로 이를 참조하여 호출할 수 있습니다. 진짜 천국.

    .NET 5 이상



    Target Framework Moniker를 설정하기만 하면 됩니다. 구체적으로는 프로젝트 파일의 TargetFramework 태그에 net5.0-windows10.0.17763.0와 같이 Windows인 것과 대상의 버젼 번호를 붙이는 것만으로 좋아집니다.

    해보자.

    VS 2019 Preview를 시작하여 WPF 프로젝트를 빨리 만듭니다.

    프로젝트 파일의 TargetFramework를 net5.0-windows에서 net5.0-windows10.0.19041.0로 설정합니다. 다음과 같은 느낌이군요.
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
        <UseWPF>true</UseWPF>
      </PropertyGroup>
    </Project>
    

    영어 블로그 쪽에도 있는 카메라로부터의 사진 촬영을 해 봅시다.

    MainWindow.xaml
    // Windows 名前空間で始まるクラスが使える!?
    using Windows.Media.Capture;
    using Windows.Media.MediaProperties;
    using System;
    using System.Windows;
    using System.Windows.Media.Imaging;
    using System.IO;
    
    namespace WpfApp8
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private async void Button_Click(object sender, RoutedEventArgs e)
            {
                // カメラから画像取り込んで表示
                using var c = new MediaCapture();
                await c.InitializeAsync();
    
                var format = ImageEncodingProperties.CreatePng();
                using var s = new MemoryStream();
                using var randomAccessStream = s.AsRandomAccessStream();
                await c.CapturePhotoToStreamAsync(format, randomAccessStream);
                await randomAccessStream.FlushAsync();
                s.Position = 0;
                var source = new BitmapImage();
                source.BeginInit();
                source.CacheOption = BitmapCacheOption.OnLoad;
                source.StreamSource = s;
                source.EndInit();
    
                image.Source = source;
            }
        }
    }
    

    움직여 보면 제대로 움직입니다. (가상 카메라의 이미지를 캡처하는 느낌입니다)



    옛날 WPF로 카메라 영상을 캡처하는 것이 굉장히 힘들었던 기억이 있으므로, 이런 OS에 연결하는 API로서 제공되고 있는 것이 빨리 부를 수 있는 것은 든든하네요.

    요약



    그렇다면 NuGet 패키지를 추가하는 것만으로도 간단했습니다. 편리~~~.

    좋은 웹페이지 즐겨찾기