Я много пробовал и наконец нашел способ получать изображения без псевдоцветов.
Поскольку XAML отображается только в формате Bgra8, его нужно было преобразовать. Это помогло обрабатывать кадры отдельно по цвету и глубине.
Мне также нужно было обновить мою Windows 10 версию до 10.0.19041.0 или более поздней.
//clrFrame.
var buffFrame = clrFrame?.BufferMediaFrame;
// Get the Individual Frame
var vidFrame = clrFrame?.VideoMediaFrame;
{
if (vidFrame == null) return;
// create a UWP SoftwareBitmap and copy Frame into Bitmap
SoftwareBitmap sbt = new SoftwareBitmap(vidFrame.SoftwareBitmap.BitmapPixelFormat, vidFrame.SoftwareBitmap.PixelWidth, vidFrame.SoftwareBitmap.PixelHeight);
vidFrame.SoftwareBitmap.CopyTo(sbt);
// PixelFormat needs to be in 8bit BGRA for Xaml writable bitmap
if (sbt.BitmapPixelFormat != BitmapPixelFormat.Bgra8)
sbt = SoftwareBitmap.Convert(vidFrame.SoftwareBitmap, BitmapPixelFormat.Bgra8);
if (source != null)
{
// To write out to writable bitmap which will be used with ImageElement, it needs to run
// on UI Thread thus we use Dispatcher.RunAsync()...
var ignore = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
// This code runs on UI Thread
// Create the writableBitmap for ImageElement display
extBitmap = new WriteableBitmap(sbt.PixelWidth, sbt.PixelHeight);
// Copy contents from UWP software Bitmap
// There are other ways of doing this instead of the double copy, 1st copy earlier
// this is a second copy.
sbt.CopyToBuffer(extBitmap.PixelBuffer);
extBitmap.Invalidate();
// Set the imageElement source
var ig = source.SetBitmapAsync(sbt);
imgView.Source = source;
});
}
}
Помогает следующий пример проекта. с этой проблемой. Мне пришлось создать обработку для ИК и глубины и передать соответствующие параметры.
https://github.com/dngoins/KinectUWPApps/tree/master/WorkingWithMediaCaptureFramesSolution