【问题标题】:Save depth frame as a PNG 16 file - Kinect SDK将深度帧保存为 PNG 16 文件 - Kinect SDK
【发布时间】:2015-06-24 22:21:15
【问题描述】:

我需要将深度帧保存为 Gray PNG 16 图像。 我只知道如何将它们保存为 32bgr 图像。 这是我的代码:

private byte[] depthFrame32;
using (DepthImageFrame imageFrame = e.OpenDepthImageFrame())
{
   if (imageFrame != null)
   {
        int stride = imageFrame.Width * 4;
        BitmapSource bmp = BitmapSource.Create(imageFrame.Width, imageFrame.Height,
            96, 96, PixelFormats.Bgr32, null, this.depthFrame32, stride);



         using (var fileStream = new FileStream(full_path, FileMode.Create))
         {
              BitmapEncoder encoder = new PngBitmapEncoder();
              encoder.Frames.Add(BitmapFrame.Create(bmp));
              encoder.Save(fileStream);
         }
   }
}

提前致谢

【问题讨论】:

    标签: c# wpf sdk kinect depth


    【解决方案1】:

    不确定您的 depthFrame32 数组在哪里填充了图像数据。

    无论如何,您说您知道如何将深度帧保存为 BGR32 位图。然后,您始终可以从原始位图创建 FormatConvertedBitmap 并保存:

    ...
    var gray16Bitmap = new FormatConvertedBitmap(bmp, PixelFormats.Gray16, null, 0d);
    
    var encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(gray16Bitmap));
    
    using (var fileStream = new FileStream(full_path, FileMode.Create))
    {
        encoder.Save(fileStream);
    }
    

    假设您已经有 16 位灰度数据(例如来自 DepthImageFrame.CopyPixelDataTo 的转换结果),您当然也可以像这样直接创建 BitmapSource:

    var stride = imageFrame.Width * 2;
    var bmp = BitmapSource.Create(imageFrame.Width, imageFrame.Height,
        96, 96, PixelFormats.Gray16, null, grayScaleData, stride);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 2012-11-27
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多