将深度帧保存为 PNG 16 文件 - Kinect SDK
Save depth frame as a PNG 16 file - Kinect SDK
我需要将深度帧保存为 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);
}
}
}
提前致谢
不确定您的 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);
我需要将深度帧保存为 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);
}
}
}
提前致谢
不确定您的 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);