Преобразование System.Drawing.Bitmap в Windows.Graphics.Imaging.SoftwareBitmap - PullRequest
0 голосов
/ 06 июня 2019

У меня есть проект WPF и я сделал снимок с USB-камеры на System.Drawing.Bitmap (я также могу захватить System.Windows.Media.Imaging.BitmapSource) и мне нужно преобразовать его в Windows.Graphics.Imaging..SoftwareBitmap для создания "VideoFrame" для сравнения с моделью Onnx.

Драйвер камеры представляет собой сборку .net и не привязывается к проекту uwp.Я попытался создать стандартную сборку .net, чтобы преодолеть разрыв без успеха.Мне просто нужно растровое изображение, преобразованное в SoftwareBitmap.Пожалуйста помоги!

Я использую этот код для основы сочувствия растрового изображения с камеры - https://github.com/Azure-Samples/cognitive-services-onnx12-customvision-sample

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Я обнаружил, что вы можете использовать Windows.Security.Cryptography для создания IBuffer из байтов массива изображения. Затем вы можете скопировать IBuffer в SoftwareBitmap.

using Windows.Security.Cryptography;

IBuffer buffer = CryptographicBuffer.CreateFromByteArray(ImageByteArray);

SoftwareBitmap softwareBitmap = new SoftwareBitmap(BitmapPixelFormat.Gray8, 800, 600);
softwareBitmap.CopyFromBuffer(buffer);
VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
0 голосов
/ 06 июня 2019

Прямого преобразования нет.Вам необходимо извлечь данные изображения из System.Drawing.Bitmap и затем создать новый SoftwareBitmap из этих данных.

Например, вы можете использовать Сохранить (Stream, ImageFormat) метод для сохранения этого изображения в указанном потоке в указанном формате.

Затем можно попытаться вызвать BitmapDecoder.CreateAsync метод для создания декодера из потока.

После этого вы можете вызвать GetSoftwareBitmapAsync , чтобы получить объект SoftwareBitmap.

Ниже приведен простой пример кода:

Bitmap bitmap = getyourbitmap();
using (var stream = new Windows.Storage.Streams.InMemoryRandomAccessStream())
{
    bitmap.Save(stream.AsStream(),ImageFormat.Jpeg);//choose the specific image format by your own bitmap source
    Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);
    SoftwareBitmap softwareBitmap = await decoder.GetSoftwareBitmapAsync();
}
...