将SoftwareBitmap转换为WriteableBitmap

每当我想将我的SoftwareBitmap转换为一个WriteableBitmap我得到以下exception: System.Runtime.InteropServices.COMException

这是我的代码片段:

  private async void Start(object sender, RoutedEventArgs e) { _MediaCapture = new MediaCapture(); await _MediaCapture.InitializeAsync(); mediaElement.Source = _MediaCapture; await _MediaCapture.StartPreviewAsync(); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 0, 1); timer.Tick += HandleTimerTick; timer.Start(); } private async void HandleTimerTick(object Sender, object E) { var frame = await _MediaCapture.GetPreviewFrameAsync(); SoftwareBitmap frameBitmap = frame.SoftwareBitmap; WriteableBitmap bitmap = new WriteableBitmap(frameBitmap.PixelWidth, frameBitmap.PixelHeight); try { frameBitmap.CopyToBuffer(bitmap.PixelBuffer); } catch (Exception) { Debug.WriteLine("Exception "); } } 

该线

 frameBitmap.CopyToBuffer(bitmap.PixelBuffer); 

抛出exception。

我正在x64 RemoteDevice上debugging这个。

我可以通过使用您的代码重现此问题。 这是由frame.SoftwareBitmap总是返回null。

您可以通过使用代码解决此问题,如下所示:

  private async void button_Click(object sender, RoutedEventArgs e) { _mediaCapture = new MediaCapture(); await _mediaCapture.InitializeAsync(); mediaElement.Source = _mediaCapture; await _mediaCapture.StartPreviewAsync(); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 0, 1); timer.Tick += Timer_Tick; timer.Start(); } private async void Timer_Tick(object sender, object e) { var previewProperties = _mediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties; var videoFrame = new VideoFrame(BitmapPixelFormat.Bgra8, (int)previewProperties.Width, (int)previewProperties.Height); var frame = await _mediaCapture.GetPreviewFrameAsync(videoFrame); SoftwareBitmap frameBitmap = frame.SoftwareBitmap; WriteableBitmap bitmap = new WriteableBitmap(frameBitmap.PixelWidth, frameBitmap.PixelHeight); frameBitmap.CopyToBuffer(bitmap.PixelBuffer); Debug.WriteLine("done"); }