Я пытаюсь захватывать изображения с веб-камеры в приложении WinUI3. После некоторых проб и ошибок мне наконец удалось сделать это через MediaFrameReader. Теперь у меня есть захваченные изображения в виде SoftwareBitmap, и, поскольку я хочу передать эти изображения в систему оптического распознавания символов, мне нужно их повернуть.
Я уже пробовал несколько способов повернуть изображения:
Примечание. Я не хочу отображать изображение повернутым, поэтому RenderTransform/LayoutTransform в Xaml моих приложений — это не то, что мне здесь нужно.
Вы хотите повернуть на заданный угол или повернуть только на 90/180/270?
@SimonMourier Мне достаточно 90/180/270
@YangXiaoPo-MSFT, как мне перейти от SoftwareBitmaps к объектам WIC для этих образцов?





Вот пример кода, который будет выполнять поворот по часовой стрелке на 180 градусов на SoftwareBitmap WinRT:
// 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);
Обратите внимание, что на самом деле это не связано с WinUI3.
Спасибо, это действительно работает. Понятия не имею, почему мой собственный код, который был очень похож, просто создавал черные изображения.
Подойдет ли вам Как перевернуть и повернуть источник растрового изображения и этот пример DirectXTextureConverter?