.net WPF或Windows窗体中的MediaCapture API [已关闭]

vx6bjr1n  于 2022-12-30  发布在  .NET
关注(0)|答案(1)|浏览(158)

13小时前关门了。
此帖子在12小时前编辑并提交审查。
Improve this question
我想在Windows窗体或WPF应用程序中使用MediaCapture,但显然它只在UWP应用程序中可用。我们如何在WPF或Windows窗体应用程序中使用它?关于这一点有很多问题,但没有一个明确解决这个问题。

6tdlim6h

6tdlim6h1#

是的,您可以在WinForms或WPF应用程序中使用MediaCapture API。为此,您需要设置项目以针对正确的Windows版本:

  • 对于.NET 6,可以将属性中的目标操作系统设置为10.0.17763.0或更高版本(或将项目文件中的TargetFramrwork设置为net6.0-windows10.0.17763.0)
  • 对于.NET 4.8,您可以为包管理器启用PackageReference,并安装Microsoft.Windows.SDK.Contracts包(10.0.17763.0或更高版本)。

我已经分享了.NET 6和.NET Framework 4.8的项目设置和代码示例。要了解更多信息,您可以查看Call Windows Runtime APIs in desktop apps

下载或复制示例

使用MediaCapture捕获图像- WinForms .NET 6

1.创建WinForms应用程序(.NET 6)
1.编辑项目的属性,将目标操作系统设置为10.0.17763.0或更高版本,也可以修改项目文件,如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows10.0.17763.0</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

1.将按钮(button 1)和图片框(pictureBox 1)拖放到窗体上。
1.处理按钮单击事件,并添加以下代码以使用照相机捕获图片,并将其转换为位图并显示在图片框中:

private async void button1_Click(object sender, EventArgs e)
{
    var mediaCapture = new MediaCapture();
    await mediaCapture.InitializeAsync();
    mediaCapture.Failed += (obj, args) => MessageBox.Show(args.Message);

    var lowLagCapture = await mediaCapture.PrepareLowLagPhotoCaptureAsync(
        ImageEncodingProperties.CreateUncompressed(MediaPixelFormat.Bgra8));
    var capturedPhoto = await lowLagCapture.CaptureAsync();
    var softwareBitmap = capturedPhoto.Frame.SoftwareBitmap;
    await lowLagCapture.FinishAsync();
    using (var stream = new InMemoryRandomAccessStream())
    {
        var encoder = await BitmapEncoder.CreateAsync(
            BitmapEncoder.PngEncoderId, stream);
        encoder.SetSoftwareBitmap(softwareBitmap);
        await encoder.FlushAsync();
        pictureBox1.Image = new Bitmap(stream.AsStream());
    }
}

使用以下using语句:

using Windows.Graphics.Imaging;
using Windows.Media.Capture;
using Windows.Media.MediaProperties;
using Windows.Storage.Streams;
using System.IO;

1.将PictureBox.SizeMode设置为缩放。
1.运行应用程序,点击按钮,并在PictureBox中看到图片。

使用MediaCapture捕获图像- WinForms .NET 4.8

该示例的代码与我在.NET 6示例中分享的代码类似,唯一的区别在于准备项目和添加引用(我也分享了另一个answer的步骤)。
1.转到工具→将“默认包管理格式”设置为“PackageReference”
1.解决方案资源管理器→右键单击您的项目→选择管理NuGet包,然后
1.找到Microsoft.Windows.SDK.Contracts软件包。在NuGet软件包管理器窗口的右窗格中,根据您要安装的Windows 10版本选择所需的软件包版本,然后单击安装。
1.按照上一个步骤3的示例操作。
更多信息和示例:

相关问题