我正在try 从WinUI 3应用程序中的网络摄像头捕获图像. 经过一些try 和错误,我终于设法通过MediaFrame Reader做到了这一点. 现在我已经将捕获的图像作为SoftwareBitmap,并且由于我想将这些图像提供给OCR,因此我需要旋转它们.

我已经try 过几种旋转图像的方法:

  1. MediaTrap.SetPreviewRotation似乎不适用于MediaFrame Reader(而且我还没有找到任何方法来使用VideoPreview流来捕获图像,而无需将CameraPreview控件作为接收器)
  2. 通过MediaTrap设置.SetEncodingPropertyAsmat似乎也不起作用(也可能仅在使用VideoPreview流时起作用)
  3. 旋转SoftwareBitmap本身,通过使用Bitmap Encoder和Bitmap Change将其转换为PNG或BMP流.旋转设置并使用Bitmap Decoder对其进行解码.这会产生正确旋转的图像,尺寸正确,但完全是黑色的

注意:我不想显示旋转图像,因此我的应用程序Xaml中的RenderShape/LayoutShape不是我在这里要寻找的.

推荐答案

以下是一个示例代码,将在WinRT SoftwareBitmap上执行180度顺时针旋转:

// prepare a memory buffer
using var ms = new MemoryStream();

// create an encoder
// set a bitmap transform, here a 180 degrees rotation
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ms.AsRandomAccessStream());
encoder.BitmapTransform.Rotation = BitmapRotation.Clockwise180Degrees;

// write the software bitmap to the memory buffer
encoder.SetSoftwareBitmap(softwareBitmap);
await encoder.FlushAsync();

// create a decoder to get the rotated result
var decoder = await BitmapDecoder.CreateAsync(ms.AsRandomAccessStream());

// get the new software bitmap
// Bgra8, Premultiplied are optional
// but mandatory if you want to use it in a SoftwareBitmapSource for example
var rotated = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);

请注意,这实际上与WinUI 3无关.

Csharp相关问答推荐

Plotly.NET访问互联网时出现异常

需要深入了解NpgSQL DateTimeOffset处理

WPF Windows初始化正在锁定. Net 8中分离的线程

从Blob存储中提取tar.gz文件并将提取结果上载到另一个Blob存储

C#EF Core 8.0表现与预期不符

Quartz调度程序不调用作业(job)类

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

Appsettings.json未加载.Net 8 Blaazor Web程序集

使用带有WithAppOnly()请求选项的pageIterator

如何捕获对ASP.NET核心应用程序的所有请求并将其发送到一个页面

当前代码Cosmos DB 3.37.1:PartitionKey key key mismatch exception

如何使用XmlSerializer序列化带有CDATA节的XML文件?

反序列化私有成员

在try 使用访问服务器上的文件夹时,如何解决CORS错误.NET核心API

BFF到具有AAD/Entra ID B2C的内部API(.NET/ASP.NET核心/标识.Web)

如何在.NET AOT中为所有枚举启用JsonStringEnumConverter

Blazor Server/.NET 8/在初始加载时调用异步代码是否冻结屏幕,直到第一次异步调用完成?

在同一个捕获中可以有多种类型的异常吗?

无效的Zip文件-Zip存档

SignalR跨域