如何从UWP C#中的SoftwareBitmap获取像素数据?

时间:2019-05-16 10:53:06

标签: uwp

您好,我正在UWP C#项目中开发屏幕共享实用程序。我已经在下面的链接中实现了所有代码。

链接:https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/screen-capture

现在的问题是如何从捕获的帧中获取像素数据。我可以在以下两个对象中转换捕获的帧。

  1. SoftwareBitmap
  2. CanvasBitmap

那么如何从这些对象中获取像素数据?

获取像素数据之前,我需要执行编码或解码还是两者都进行?

1 个答案:

答案 0 :(得分:0)

您可以通过调用CanvasBitmap.CreateFromDirect3D11Surface方法来获取CanvasBitmap实例。在此实例上调用GetPixelBytes方法将位图的像素数据作为字节数组返回。

using (var frame = _framePool.TryGetNextFrame())  {
  using (var canvasBitmap = CanvasBitmap.CreateFromDirect3D11Surface(_canvasDevice, frame.Surface)) {
      bytes[] pixelData = canvasBitmap.GetPixelBytes();
  }
}  
  

我是否需要先执行编码或解码或同时执行两项操作   像素数据?

返回的数据应与创建帧池时指定的像素格式相同:

_framePool = Direct3D11CaptureFramePool.Create( 
    _canvasDevice, // D3D device 
    DirectXPixelFormat.B8G8R8A8UIntNormalized, // Pixel format 
    2, // Number of frames 
    _item.Size); // Size of the buffers